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

SQL 進階教學:GROUP BY 分組彙總與 HAVING 進階過濾

     編輯:關於SqlServer

彙總函數回顧

彙總函數作用於多列資料,回傳單一值:

  • SUM(col)、COUNT(col)、AVG(col)、MAX(col)、MIN(col)
SELECT SUM(population) FROM bbc;  -- 全球總人口,僅回傳 1 列

GROUP BY:分組彙總

GROUP BY column 將結果依欄位分組,每組僅回傳 1 列;非分組欄位必須搭配彙總函數。

範例:各地區總人口與總面積

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

HAVING:分組後過濾

WHERE 在分組前過濾列;HAVING 在分組後過濾組。

範例:僅顯示總面積超過 1,000,000 平方公里的地區

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

此處不能用 WHERE,因為原始表無「地區總面積」此欄位。

WHERE vs HAVING 執行順序

  1. FROM / JOIN
  2. WHERE(列級過濾)
  3. GROUP BY(分組)
  4. HAVING(組級過濾)
  5. SELECT(投影)
  6. ORDER BY(排序)

常見錯誤與修正

錯誤寫法問題正確寫法
SELECT region, population FROM bbc GROUP BY regionpopulation 非分組欄位且未彙總SELECT region, SUM(population) FROM bbc GROUP BY region
SELECT region, SUM(area) FROM bbc WHERE SUM(area) > 1000000 GROUP BY regionWHERE 不可用彙總函數SELECT region, SUM(area) FROM bbc GROUP BY region HAVING SUM(area) > 1000000

練習題

  1. 統計每個地區的國家數、平均人口、最大 GDP。
  2. 找出平均人口超過 5000 萬的地區。
  3. 列出國家數大於 10 的地區,依國家數遞減排序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved