| 函數 | 說明 | 忽略 NULL |
|---|---|---|
AVG(col) | 平均值 | 是 |
COUNT(col) | 非 NULL 個數 | 是 |
MIN(col) | 最小值 | 是 |
MAX(col) | 最大值 | 是 |
SUM(col) | 總和 | 是 |
注意:COUNT(*) 統計行數(含 NULL),COUNT(col) 統計該列非 NULL 個數。
將分組內的列值拼接為字符串,極其實用。
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
-- 基本用法:分組拼接姓名
SELECT dept_id, GROUP_CONCAT(name) FROM employee GROUP BY dept_id;
-- 自定義分隔符
SELECT dept_id, GROUP_CONCAT(name SEPARATOR ';') FROM employee GROUP BY dept_id;
-- 排序後拼接
SELECT dept_id, GROUP_CONCAT(name ORDER BY hire_date) FROM employee GROUP BY dept_id;
-- 組合:去重 + 排序 + 分隔符
SELECT dept_id, GROUP_CONCAT(DISTINCT name ORDER BY name SEPARATOR '|') FROM employee GROUP BY dept_id;
SELECT
dept_id,
COUNT(*) AS emp_count,
AVG(salary) AS avg_salary,
MIN(salary) AS min_salary,
MAX(salary) AS max_salary,
SUM(salary) AS total_salary,
GROUP_CONCAT(name ORDER BY salary DESC SEPARATOR ',') AS top_earners
FROM employee
GROUP BY dept_id;
SUM(CASE WHEN status='active' THEN 1 ELSE 0 END) AS active_countPERCENTILE_CONT、PERCENTILE_DISC。GROUP_CONCAT 默認最大長度 1024 字節,超長會截斷,可調整:SET SESSION group_concat_max_len = 10000;JSON_ARRAYAGG(col)、JSON_OBJECTAGG(key, val) 直接生成 JSON 結構。GROUP BY 列有索引。WITH ROLLUP 生成多維小計。SUM(LENGTH(name))),阻礙索引使用。掌握這六個聚合函數,覆蓋從簡單統計到複雜報表的絕大多數需求。