[英]SQL query - split out count() results into one line of GROUP BY results
我想使用 GROUP BY 来获取每个月/年的一行。 此外,我还有另一个字段,在这个例子中,它是颜色,可以有蓝色或红色的值。
我想查看一个包含蓝色、红色、月份和年份列的表格 = 我想计算每个月-年每种颜色的数量。 我可以使用 SQL 查询来执行此操作吗?
我知道 count(color) 会给我每个月每年的总行数。
如果可以做到这一点很好,但某些解决方案可能涉及“红色”和“蓝色”编码 = 仅 2 个值。 是否可以运行查询来执行计数,将计数中的“答案”分成每一行而不是每行?
示例数据:
年 | 月 | 天 | 颜色 |
---|---|---|---|
2021 | 3 | 6 | 蓝色的 |
2021 | 3 | 7 | 蓝色的 |
2021 | 3 | 8 | 蓝色的 |
2021 | 3 | 9 | 红色的 |
2021 | 4 | 5 | 蓝色的 |
2021 | 4 | 6 | 红色的 |
2021 | 4 | 7 | 蓝色的 |
2021 | 4 | 8 | 红色的 |
2021 | 4 | 9 | 红色的 |
给出结果
年 | 月 | 蓝色的 | 红色的 |
---|---|---|---|
2021 | 3 | 3 | 1 |
2021 | 4 | 2 | 3 |
我在 mysql 和 javascript 中使用 alasql 执行此操作,但对任何版本的 SQL 的建议可能在这里会有所帮助...
您可以使用SUM(CASE WHEN...
来执行此操作
SELECT Year, Month, SUM(CASE WHEN Colour = 'Blue' THEN 1 ELSE 0 END) AS Blue, etc
FROM table
GROUP BY Year, Month
您可以执行以下操作:
GROUP BY Year(yourdate),
Month(yourdate),
Day(yourdate),
Colour
Group By 不限于作用于单个列(或表达式)。
您可以编写这样的查询
SELECT Year,
Month,
COUNT(CASE WHEN Colour = 'Blue' THEN 1 END) AS Blue,
COUNT(CASE WHEN Colour = 'Red' THEN 1 END) AS Red
FROM table
GROUP BY Year, Month;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.