1. 程式人生 > 資料庫 >[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)資料分組&條件排序

[Mysql] GROUP BY (WITH ROLLUP)& ORDER BY (IF)資料分組&條件排序

[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查詢彙總方式,歡迎互相交流~