萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

SQL GROUP BY 完整教學:分組統計、多欄位分組、搭配聚合函數與進階應用

GROUP BY 核心概念

將結果集依指定欄位分組,每組套用聚合函數(SUM, COUNT, AVG, MAX, MIN)產生單一彙總行。

基礎範例:員工工時統計

原始資料:

EmployeeDateHours
John Smith5/6/20048
Allan Babel5/6/20048
Tina Crown5/6/20048
John Smith5/7/20049
Allan Babel5/7/20048
Tina Crown5/7/200410

全員總工時

SELECT SUM(Hours) FROM EmployeeHours; -- 結果:51

各員工總工時

SELECT Employee, SUM(Hours) AS TotalHours
FROM EmployeeHours
GROUP BY Employee;

結果:

EmployeeTotalHours
John Smith25
Allan Babel24
Tina Crown27

各員工平均工時

SELECT Employee, AVG(Hours) AS AvgHours
FROM EmployeeHours
GROUP BY Employee;

多欄位分組

-- 依日期再依員工分組
SELECT Date, Employee, SUM(Hours)
FROM EmployeeHours
GROUP BY Date, Employee;

僅按日期分組

SELECT Date, SUM(Hours) AS DailyTotal
FROM EmployeeHours
GROUP BY Date;

結果:

DateDailyTotal
5/6/200424
5/7/200427

重要規則:SELECT 清單限制

啟用 ONLY_FULL_GROUP_BY(MySQL 5.7+ 預設開啟)時,SELECT 清單只能包含:

  • 分組欄位(GROUP BY 後的欄位)
  • 聚合函數結果
  • 函數依賴分組欄位的運算式

違反會報錯:ERROR 1055: 'col' isn't in GROUP BY。

進階技巧

  • GROUP BY 1, 2:用欄位位置編號(不建議,易讀性差)。
  • GROUP BY ROLLUP / CUBE:產生超級彙總行(MySQL 8.0 支援)。
  • 搭配 HAVING 過濾群組(見前文)。
copyright © 萬盛學電腦網 all rights reserved