最近遇到一個問題,需要對一張表做統計,這個統計有什么特別之處值得我記錄了下來呢?大家知道SQL中聚合函數GROUP BY的結果一般為一列,即多個值通過聚合函數運算統計到一起,但是如何將不同條件的值統計到不同列中呢,即按條件統計到多個列中。舉個栗子:
YEAR | TYPE | VALUE |
2015 | 1 | 100 |
2015 | 2 | 200 |
2016 | 1 | 150 |
2016 | 2 | 300 |
2016 | 3 | 100 |
轉為:
YEAR | TYPE1 | TYPE2 | TYPE3 |
2015 | 100 | 200 | 0 |
2016 | 150 | 300 | 100 |
這時候我們除了用到GROUP BY之外還需要CASE WHEN,SQL如下:
SELECT year, SUM(CASE WHEN type=1 THEN value ELSE 0 END) as type1, SUM(CASE WHEN type=2 THEN value ELSE 0 END) as type2, SUM(CASE WHEN type=3 THEN value ELSE 0 END) as type3, FROM table_test GROUP BY year
小小的知識點,記錄下來並分享給有需要的人。
P.S. 這里TYPE是寫死的,有沒有辦法能更靈活一點呢?