SELECT
sell_date,
COUNT(DISTINCT product) AS num_sold,
GROUP_CONCAT(DISTINCT product ORDER BY product SEPARATOR ',') AS products
FROM Activities
GROUP BY sell_date
ORDER BY sell_date;
输出示例
sell_date
num_sold
products
2020-05-30
2
Basketball,Headphone
2020-06-01
2
Bible,Pencil
2020-06-02
1
Mask
三、COUNT(DISTINCT) 函数深度解析
COUNT()的三种常见用法
写法
作用
是否忽略NULL
COUNT(*)
统计所有行数
不忽略NULL
COUNT(列名)
统计该列非NULL的行数
忽略NULL
COUNT(DISTINCT 列名)
统计该列去重后非NULL值的个数
忽略NULL
为什么用COUNT(DISTINCT product)而不是COUNT(sell_date)?
需求分析
要统计什么
用什么列
原因
每天
按sell_date分组
分组依据
卖了多少种不同的产品
COUNT(DISTINCT product)
需要统计产品种类数
示例数据
sell_date
product
2020-06-01
Apple
2020-06-01
Apple
2020-06-01
NULL
2020-06-01
Banana
查询与结果
sql复制代码
SELECT COUNT(DISTINCT product) AS num_sold
FROM Activities
WHERE sell_date = '2020-06-01';
结果: 2
Apple重复,只算1次
NULL被忽略
所以结果是2(Apple和Banana)
COUNT(*) vs COUNT(DISTINCT product)
数据示例
sell_date
product
2020-06-01
Apple
2020-06-01
Apple
2020-06-01
Banana
对比结果
SQL
结果
含义
SELECT COUNT(*) FROM Activities WHERE sell_date = '2020-06-01'
3
这一天有3条销售记录
SELECT COUNT(DISTINCT product) FROM Activities WHERE sell_date = '2020-06-01'