SQL Server group by語句的幾種用法描述
以下的文章主要描述的是SQL Server group by的正確用法,在實際操作中group by是經常要用到的語法,那么你對SQL Server group by的用法有興趣了解的話,你就可以通過以下的文章對其有個更好的了解。
group by 是SQL Server 中常用的一種語法,語法如下:
- [ GROUP BY [ ALL ] group_by_expression [ ,...n ]
- [ WITH { CUBE | ROLLUP } ]
- ]
SQL Server group by的用法1、最常用的就是這種語法,如下:
- Select CategoryID, AVG(UnitPrice), COUNT(UnitPrice)
- FROM dbo.Products Where UnitPrice > 30
- GROUP BY CategoryID
- ORDER BY CategoryID DESC
這個語句查詢出,所有產品分類的產品平均單價,單價計數(shù)。并且單價在 30 以上的記錄。
SQL Server group by的用法2、再看看這種語法,如下:
- Select CategoryID, AVG(DISTINCT UnitPrice), COUNT(DISTINCT UnitPrice)
- FROM dbo.Products
- Where UnitPrice > 30
- GROUP BY CategoryID
- ORDER BY CategoryID DESC
使用 DISTINCT 的時候,將會去除重復的價格平均單價。
SQL Server group by的用法3、如果希望在分類統(tǒng)計之后,再使用條件過濾,下面的語句可以做為參數(shù):
- 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 組合使用。
SQL Server group by的用法4、如果希望再在分類統(tǒng)計中,添加匯總行,可以使用以下語句:
- Select CategoryID, SUM(UnitPrice), GROUPING(CategoryID) AS 'Grouping'
- FROM dbo.Products
- GROUP BY CategoryID WITH ROLLUPGrouping
這一列用于標識出哪一行是匯總行。它使用 ROLLUP 操作添加匯總行。
SQL Server group by的用法5、如果使用 WITH CUBE 將會產生一個多維分類數(shù)據集,如下:
- Select CategoryID, SupplierID, SUM(UnitPrice) AS SumPrice
- FROM dbo.Products
- GROUP BY CategoryID, SupplierID WITH CUBE
它會產生一個交叉表,產生所有可能的組合匯總。
SQL Server group by的用法6、使用 ROLLUP CUBE 會產生一個 NULL 空值,可以使用以下語法解決,如下:
- Select CASE WHEN (GROUPING(SupplierID) = 1) THEN '-1' ELSE SupplierID END AS SupplierID, SUM(UnitPrice) AS QtySum
- FROM dbo.ProductsGROUP BY SupplierID WITH CUBE
它首先檢查當前行是否為匯總行,如果是就可以設置一個值,這里設置為 '-1' 。
【編輯推薦】