簡體   English   中英

SQL 查詢 - 將 count() 結果拆分為一行 GROUP BY 結果

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

我會建議修復設計。 您只能以日期格式將日期存儲在一列中。 請注意MySQL 保留字,例如YEARMONTHDATE ,您應該為這些列使用反引號。

如果你只有藍色和紅色,你可以做一個簡單的解決方案:

SELECT Year, 
       Month, 
       SUM(Colour='Blue') as Blue, 
       SUM(Colour='Red') as Red   
FROM test_tbl    
GROUP BY `Year`, `Month`;

結果:

 Year Month Blue Red 2021 3 3 1 2021 4 2 3

演示

您可以執行以下操作:

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM