首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server GROUP BY 實戰:從基礎語法到多表彙總分析

     編輯:關於SqlServer

關聯式資料庫採正規化儲存,分析時需透過 GROUP BY 將分散資料彙總。以 Northwind 範例資料庫示範實務技巧。

基礎:單表彙總與 GROUP BY 必要性

查詢各訂單的商品項目數:

SELECT o.OrderID, COUNT(od.ProductID) AS NumItems
FROM Orders o, [Order Details] od
WHERE o.OrderID = od.OrderID
GROUP BY o.OrderID
ORDER BY NumItems DESC

錯誤示範: 若 SELECT 清單含非彙總欄位(如 o.OrderID)卻未加入 GROUP BY,將報錯 Msg 8118。

進階:多欄位分組與多重彙總

統計各客戶購買各類產品總量:

SELECT c.CompanyName, p.ProductName, SUM(od.Quantity) AS TotalBought
FROM Customers c, Products p, Orders o, [Order Details] od
WHERE c.CustomerID = o.CustomerID
  AND o.OrderID = od.OrderID
  AND od.ProductID = p.ProductID
GROUP BY c.CompanyName, p.ProductName
ORDER BY CompanyName, TotalBought DESC

多重彙總函數同時使用

單一查詢同時取得單項最大採購量與總採購量:

SELECT o.OrderID,
       MAX(od.Quantity) AS TopItem,
       SUM(od.Quantity) AS TotalBought
FROM Orders o, [Order Details] od, Products p
WHERE o.OrderID = od.OrderID
  AND od.ProductID = p.ProductID
GROUP BY o.OrderID
ORDER BY TotalBought DESC

GROUP BY 核心規則速查

  • SELECT 清單中所有非彙總欄位,必須出現在 GROUP BY
  • 可對多個欄位分組,順序不影響結果但影響輸出排序
  • ORDER BY 可使用彙總別名(如 NumItems)
  • WHERE 過濾發生在分組前,HAVING 過濾發生在分組後

實務建議

  1. 先寫 FROM/JOIN/WHERE 確認資料來源正確
  2. 決定分組維度(依什麼欄位看資料)
  3. 選擇彙總函數(COUNT/SUM/AVG/MAX/MIN)
  4. 最後加上 ORDER BY 讓結果可讀

熟練 GROUP BY,即能從正規化資料中快速產出商業決策所需的彙總報表。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved