[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)資料分組&條件排序
阿新 • • 發佈:2020-12-16
[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)資料分組&條件排序
Mysql中 GROUP BY & ORDER BY 組合一起使用,先分組,再在分組統計的基礎上作相同計算,同時對銷售額進行降序排列,總行不參與排序,其中就涉及到了條件排序。
業務場景:
針對大量的銷售明細,必要時,需要我們整理簡化,直接調用出彙總資料,方便檢視。
例如:我們要看每個門店總的銷售資料,同時新增總行,並且銷售額按照降序排列。由圖1的銷售明細彙總成圖2。
Mysql的查詢語句如下:
SELECT COALESCE ( `門店名稱`, '彙總' ) AS 門店, round( sum( `銷售額` ), 2 ) AS 銷售總額 FROM `store sales` GROUP BY `門店名稱` WITH ROLLUP ORDER BY IF (門店= '彙總', 0, 1 ) DESC,銷售總額 DESC
相關知識點:
① GROUP BY 將資料表按欄位進行分組。
WITH ROLLUP 可以實現在分組統計資料基礎上再進行相同的計算,比如(SUM,AVG,COUNT…)。
②ORDER BY ASC/DESC 將查詢資料排序後再返回資料。
③COALESCE是一個函式,COALESCE (expression_1, expression_2, …,expression_n)遇到非null值即停止並返回該值。
我們使用WITH ROLLUP在分組的基礎上對所有的資料進行了求和,可以看到彙總行門店名稱欄位為空值,所以用了COALESCE函式定義將該空值定義為了"彙總"。
④ORDER BY 和IF配合使用
上圖可以看出按照銷售額降序排,僅使用ORDER BY DESC,彙總行其實也參與了排序,這裡我們要配合if一起使用,對彙總項附加隱藏屬性,不參與排序。
參考連結:
很實用的SQL查詢彙總方式,歡迎互相交流~