如何编写SQL语句按日期分组统计指定颜色的数量?
按日期分组统计各颜色数量的SQL实现
你可以使用条件聚合的方式实现行转列,按日期统计每种颜色的数量,已知所有颜色种类的情况下,代码如下(请将color_records替换为你的实际表名):
SELECT date, SUM(CASE WHEN color = 'RED' THEN 1 ELSE 0 END) AS RED, SUM(CASE WHEN color = 'BLUE' THEN 1 ELSE 0 END) AS BLUE, SUM(CASE WHEN color = 'GREEN' THEN 1 ELSE 0 END) AS GREEN FROM color_records GROUP BY date ORDER BY date;
代码说明:
GROUP BY date:按日期对数据分组,确保每个日期只返回一行结果。SUM(CASE ...):对每个颜色进行条件统计:- 当行中
color匹配目标颜色时返回1,否则返回0; - 通过
SUM累加这些值,得到该颜色在当天的总数量; - 如果某天没有某颜色的数据,
SUM会返回0,正好符合你需要的结果。
- 当行中
另一种等价写法(使用COUNT):
你也可以用COUNT替代SUM,因为COUNT会忽略NULL值,写法如下:
SELECT date, COUNT(CASE WHEN color = 'RED' THEN 1 END) AS RED, COUNT(CASE WHEN color = 'BLUE' THEN 1 END) AS BLUE, COUNT(CASE WHEN color = 'GREEN' THEN 1 END) AS GREEN FROM color_records GROUP BY date ORDER BY date;
两种写法都能得到你需要的结果,选择自己习惯的即可。
内容的提问来源于stack exchange,提问作者hank
相关产品推荐
相关产品推荐

