彙總函數作用於多列資料,回傳單一值:
SUM(col)、COUNT(col)、AVG(col)、MAX(col)、MIN(col)SELECT SUM(population) FROM bbc; -- 全球總人口,僅回傳 1 列
GROUP BY column 將結果依欄位分組,每組僅回傳 1 列;非分組欄位必須搭配彙總函數。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region;
WHERE 在分組前過濾列;HAVING 在分組後過濾組。
SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area) > 1000000;
此處不能用 WHERE,因為原始表無「地區總面積」此欄位。
FROM / JOINWHERE(列級過濾)GROUP BY(分組)HAVING(組級過濾)SELECT(投影)ORDER BY(排序)| 錯誤寫法 | 問題 | 正確寫法 |
|---|---|---|
SELECT region, population FROM bbc GROUP BY region | population 非分組欄位且未彙總 | SELECT region, SUM(population) FROM bbc GROUP BY region |
SELECT region, SUM(area) FROM bbc WHERE SUM(area) > 1000000 GROUP BY region | WHERE 不可用彙總函數 | SELECT region, SUM(area) FROM bbc GROUP BY region HAVING SUM(area) > 1000000 |