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

MySQL GROUP BY 分組聚合完全指南:從基礎語法到 WITH ROLLUP 進階應用

     編輯:MySQL 入門

MySQL GROUP BY 分組聚合完全指南:從基礎語法到 WITH ROLLUP 進階應用

GROUP BY 是 SQL 聚合分析的基石。它將結果集按一或多個欄位分組,配合 COUNT、SUM、AVG、MAX、MIN 等聚合函數,快速產出統計報表:每日銷售額、各部門人數、用戶登入次數等。

核心語法結構

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE condition
GROUP BY column_name;

實戰資料集:employee_tbl 員工簽到記錄

CREATE TABLE employee_tbl (
    id INT PRIMARY KEY,
    name CHAR(10) NOT NULL DEFAULT '',
    date DATETIME NOT NULL,
    singin TINYINT NOT NULL DEFAULT 0 COMMENT '登錄次數'
);

INSERT INTO employee_tbl VALUES
('1', '小明', '2016-04-22 15:25:33', '1'),
('2', '小王', '2016-04-20 15:25:47', '3'),
('3', '小麗', '2016-04-19 15:26:02', '2'),
('4', '小王', '2016-04-07 15:26:14', '4'),
('5', '小明', '2016-04-11 15:26:40', '4'),
('6', '小明', '2016-04-04 15:26:54', '2');

基礎範例 1:按姓名分組統計記錄筆數

mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name;
+--------+----------+
| name | COUNT(*) |
+--------+----------+
| 小麗 | 1 |
| 小明 | 3 |
| 小王 | 2 |
+--------+----------+

基礎範例 2:按姓名分組統計總登入次數

mysql> SELECT name, SUM(singin) AS singin_count
    -> FROM employee_tbl GROUP BY name;
+--------+--------------+
| name | singin_count |
+--------+--------------+
| 小麗 | 2 |
| 小明 | 7 |
| 小王 | 7 |
+--------+--------------+

進階神器:WITH ROLLUP — 多維度小計一鍵生成

WITH ROLLUP 在分組統計基礎上,自動追加超級聚合行(Grand Total),並對每個分組層級產生小計。

mysql> SELECT name, SUM(singin) AS singin_count
    -> FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name | singin_count |
+--------+--------------+
| 小麗 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| NULL | 16 |
+--------+--------------+

最後一行 NULL 代表全員總登入次數 16。若按 name, date 雙欄分組,會產生「每人小計」+「總計」兩層級彙總。

美化輸出:COALESCE 替換 NULL 顯示

mysql> SELECT COALESCE(name, '總數') AS name, SUM(singin) AS singin_count
    -> FROM employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| name | singin_count |
+--------------------------+--------------+
| 小麗 | 2 |
| 小明 | 7 |
| 小王 | 7 |
| 總數 | 16 |
+--------------------------+--------------+

COALESCE(a,b,c...) 返回第一個非 NULL 參數,完美解決報表顯示問題。

常見陷阱與最佳實踐

  1. 非聚合欄位必須出現在 GROUP BY 中(ONLY_FULL_GROUP_BY 模式下),否則報錯或產生不確定結果。
  2. WHERE 在 GROUP BY 前過濾原始行,HAVING 在分組後過濾聚合結果。
  3. 大數據量分組前先縮小範圍:利用 WHERE 過濾時間範圍、狀態等,再 GROUP BY,大幅提升效能。
  4. 善用複合索引:INDEX (name, date) 可加速 GROUP BY name, date。

掌握 GROUP BY 與 WITH ROLLUP,配合 COALESCE 美化輸出,即可快速產出專業級統計報表,滿足業務多維度分析需求。

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