[英]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.