首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL聚合函數實戰:COUNT/SUM/AVG/MAX/MIN/CONCAT 分組統計與報表查詢核心技巧

     編輯:MySQL 資料庫相關知識

參考表

score(id, stu_id, c_name, grade) — 學生課程成績表

五大聚合函數核心用法

函數用途示例關鍵點
COUNT(*)統計行數COUNT(*) FROM score WHERE stu_id=901不忽略NULL,*最快
SUM()求和SUM(grade) FROM score GROUP BY c_name忽略NULL,數值類型
AVG()平均值AVG(grade) FROM score WHERE c_name='計算機'忽略NULL,精度注意
MAX()最大值MAX(grade) FROM score GROUP BY c_name忽略NULL,支持字符/日期
MIN()最小值MIN(grade) FROM score WHERE c_name='中文'忽略NULL,支持字符/日期

分組查詢進階模式

單列分組 + 多聚合

SELECT c_name, 
    COUNT(*) AS 參考人數,
    AVG(grade) AS 平均分,
    MAX(grade) AS 最高分,
    MIN(grade) AS 最低分
FROM score
GROUP BY c_name;

多列分組(多維分析)

SELECT stu_id, c_name, AVG(grade)
FROM score
GROUP BY stu_id, c_name;  -- 學生+課程雙維度

HAVING 過濾分組結果

SELECT c_name, AVG(grade) AS avg_grade
FROM score
GROUP BY c_name
HAVING AVG(grade) > 80;  -- 僅保留平均分>80的課程

區別:WHERE過濾原始行(聚合前),HAVING過濾分組結果(聚合後)。

字符串拼接:CONCAT

SELECT CONCAT(c_name, '(', stu_id, ')') AS course_student
FROM score
ORDER BY stu_id;

輸出示例:計算機(901)、英語(902)。報表導出、標籤生成常用。

性能優化建議

  • 索引支持:GROUP BY列建索引,避免臨時表+filesort
  • 流式聚合:MySQL 8.0+支持WITH ROLLUP超級聚合,單次掃描得總計
  • 近似計算:超大數據集用APPROX_COUNT_DISTINCT()(8.0.13+)
  • 只讀副本:報表查詢路由到從庫,避免影響主庫寫入

聚合函數是數據分析、BI報表、運營看板的基石,掌握分組邏輯與索引配合,是SQL進階必修課。

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