程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql server中group by 的幾種用法

sql server中group by 的幾種用法

編輯:關於SqlServer

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) > 300
HAVING 與 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' 。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved