Group by 是SQL Server 中常用的一種語法,語法如下:
[ GROUP BY [ ALL ] group_by_expression [ ,...n ] [ WITH { CUBE | ROLLUP } ]]
1、最常用的就是這種語法,如下:
Select CategoryID, AVG(UnitPrice), COUNT(UnitPrice)
FROM dbo.Products Where UnitPrice > 30
GROUP BY CategoryID
ORDER BY CategoryID DESC
這個語句查詢出,所有產品分類的產品平均單價,單價計數。並且單價在 30 以上的記錄。
2、再看看這種語法,如下:
Select CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice)
FROM dbo.Products Where UnitPrice > 30
GROUP BY CategoryID
ORDER BY CategoryID DESC
使用 DISTINCT 的時候,將會去除重復的價格平均單價。
3、如果希望在分類統計之後,再使用條件過濾,下面的語句可以做為參數:Select CategoryID, SUM(UnitPrice) AS SumPrice
FROM dbo.Products
GROUP BY CategoryID
HAVING SUM(UnitPrice) > 300HAVING 與 Where 語句類似,Where 是在分類之前過濾,而 HAVING 是在分類之後過濾。
它和 Where 一樣使用 AND、OR、NOT、LIKE 組合使用。
4、如果希望再在分類統計中,添加匯總行,可以使用以下語句:
Select CategoryID, SUM(UnitPrice), GROUPING(CategoryID) AS 'Grouping'
FROM dbo.Products
GROUP BY歡迎光臨學網,收藏本篇文章 [1] [2]$False$
nt> CategoryID WITH ROLLUP
Grouping 這一列用於標識出哪一行是匯總行。
它使用 ROLLUP 操作添加匯總行。
5、如果使用 WITH CUBE 將會產生一個多維分類數據集,如下:
Select CategoryID, SupplIErID, SUM(UnitPrice) AS SumPrice
FROM dbo.Products
GROUP BY CategoryID, SupplIErID WITH CUBE
它會產生一個交叉表,產生所有可能的組合匯總。
6、使用 ROLLUP CUBE 會產生一個 NULL 空值,可以使用以下語法解決,如下:
Select CASE WHEN (GROUPING(SupplIErID) = 1) THEN '-1'
ELSE SupplIErID
END AS SupplIErID,
SUM(UnitPrice) AS QtySum
FROM dbo.Products
GROUP BY SupplIErID WITH CUBE它首先檢查當前行是否為匯總行,如果是就可以設置一個值,這裡設置為 '-1' 。