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

SQL 教學(四):深入掌握 GROUP BY 與 HAVING 子句

     編輯:關於SqlServer

在學習 GROUP BY 和 HAVING 子句之前,必須先了解 SQL 中一類特殊的函數——聚合函數,例如 SUM、COUNT、MAX、AVG 等。這些函數與一般函數的根本差別在於:它們作用於多筆記錄,而非單一數值。

以 SELECT SUM(population) FROM bbc 為例,SUM 作用於所有回傳記錄的 population 欄位,查詢結果僅會回傳一個值——所有國家的總人口數。

透過 GROUP BY 子句,我們可以讓聚合函數針對「同一組」的資料運作。當指定 GROUP BY region 時,屬於同一個 region(地區)的資料會被分成一組,每組僅回傳一行結果。換句話說,除 region 之外的欄位,只能透過 SUM、COUNT 等聚合函數運算後,才能回傳單一值。

HAVING 子句則用於篩選分組後的群組資料。它與 WHERE 子句的關鍵差別在於執行時機:

  • WHERE:在聚合之前先篩選記錄,作用於 GROUP BY 和 HAVING 之前。
  • HAVING:在聚合之後對群組記錄進行篩選。

實戰範例:以 bbc 資料表為例

範例一:顯示每個地區的總人口數與總面積

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region

查詢會先依 region 將回傳記錄分成多組,再對每組的不同欄位套用聚合函數運算。

範例二:僅顯示面積超過 1,000,000 的地區

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area) > 1000000

此處無法使用 WHERE 篩選,因為資料表中不存在「面積超過 1,000,000」這樣的單筆記錄;HAVING 則能直接針對分組後的聚合結果進行過濾。

掌握 GROUP BY 與 HAVING 的運作時機與差異,是撰寫高效彙總查詢的關鍵。

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