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; -- 學生+課程雙維度
SELECT c_name, AVG(grade) AS avg_grade
FROM score
GROUP BY c_name
HAVING AVG(grade) > 80; -- 僅保留平均分>80的課程
區別:WHERE過濾原始行(聚合前),HAVING過濾分組結果(聚合後)。
SELECT CONCAT(c_name, '(', stu_id, ')') AS course_student
FROM score
ORDER BY stu_id;
輸出示例:計算機(901)、英語(902)。報表導出、標籤生成常用。
GROUP BY列建索引,避免臨時表+filesortWITH ROLLUP超級聚合,單次掃描得總計APPROX_COUNT_DISTINCT()(8.0.13+)聚合函數是數據分析、BI報表、運營看板的基石,掌握分組邏輯與索引配合,是SQL進階必修課。