一、SQL / MySQL 聚合函数「全集总览」
以下函数 都会触发聚合语义 ,必须配合
GROUP BY或用于整体统计
① 行数统计类
| 函数功能 | 说明 |
|---|---|
COUNT(*) |
统计行数(最安全) |
COUNT(expr) |
统计 expr ≠ NULL 的行数 |
COUNT(DISTINCT expr) |
去重计数 |
示例
plain
COUNT(*)
COUNT(id_card)
COUNT(DISTINCT dept_id)
⚠️ 注意
COUNT(DISTINCT a, b)❌ MySQL 不支持- 只能
COUNT(DISTINCT expr)
② 数值统计类
| 函数功能 | 说明 |
|---|---|
SUM(expr) |
求和 |
SUM(DISTINCT expr) |
去重求和 |
AVG(expr) |
平均值 |
AVG(DISTINCT expr) |
去重平均 |
plain
SUM(score)
AVG(salary)
⚠️ 注意
- NULL 自动忽略
- 全 NULL → 返回 NULL
③ 极值类
| 函数功能 | 说明 |
|---|---|
MAX(expr) |
最大值 |
MIN(expr) |
最小值 |
plain
MAX(birth_date)
MIN(score)
✔ 支持 数值 / 字符串 / 日期
④ 字符串聚合类(非常重要)
1️⃣ GROUP_CONCAT(MySQL 特有)
| 函数功能 | 说明 |
|---|---|
GROUP_CONCAT(expr) |
分组拼接 |
GROUP_CONCAT(DISTINCT expr) |
去重拼接 |
plain
GROUP_CONCAT(name SEPARATOR ',')
高级:
plain
GROUP_CONCAT(DISTINCT name ORDER BY name SEPARATOR '、')
⚠️ 注意
- 默认长度 1024
- 超出会被截断
⑤ 统计学函数(MySQL 8 完整支持)
方差 / 标准差
| 函数功能 | 含义 |
|---|---|
VAR_POP() |
总体方差身体方向差异 |
VAR_SAMP() |
样本方差 |
VARIANCE() |
等价 VAR_POP |
STDDEV_POP() |
总体标准差 |
STDDEV_SAMP() |
样本标准差 |
STD() |
等价 STDDEV_POP标准差_流行 |
STDDEV() |
等价 STDDEV_POP标准差_流行 |
plain
STDDEV(score)
VAR_SAMP(score)
⑥ 位运算聚合(权限 / 标志位)
| 函数功能 | 说明 |
|---|---|
BIT_AND(expr) |
按位与 |
BIT_OR(expr) |
按位或 |
BIT_XOR(expr) |
按位异或 |
plain
BIT_OR(permission_mask)
⑦ JSON 聚合函数(MySQL 8 重点)
| 函数功能 | 说明 |
|---|---|
JSON_ARRAYAGG(expr) |
聚合成 JSON 数组 |
JSON_OBJECTAGG(k, v) |
聚合成 JSON 对象 |
示例
plain
JSON_ARRAYAGG(name)
plain
JSON_OBJECTAGG(id, name)
⚠️ 注意
- key 不能重复(否则报错)
⑧ 布尔 / 条件聚合(高级)
| 函数功能 | 说明 |
|---|---|
BOOL_AND(expr) |
全为 TRUE → TRUE |
BOOL_OR(expr) |
有一个 TRUE → TRUE |
plain
BOOL_AND(score >= 60)
⑨ ANY_VALUE(ONLY_FULL_GROUP_BY 救命函数)
plain
ANY_VALUE(expr)
👉 告诉 MySQL:我知道我在干嘛
plain
SELECT
ANY_VALUE(name),
COUNT(*)
FROM user
GROUP BY dept_id;
⚠️ 仅用于 你确定任取一条都没问题的场景
⑩ 窗口聚合函数(但 ⚠️ 不等价 GROUP BY)
⚠️ 这些是「分析函数」,不是 GROUP BY 聚合但经常一起混用,必须分清
| 函数功能 | 说明 |
|---|---|
COUNT() OVER() |
窗口计数 |
SUM() OVER() |
累计求和 |
AVG() OVER() |
滑动平均 |
plain
SUM(score) OVER (PARTITION BY dept_id)
二、MySQL 聚合函数完整清单(官方级)
plain
COUNT
SUM
AVG
MIN
MAX
GROUP_CONCAT
VAR_POP
VAR_SAMP
VARIANCE
STD
STDDEV
STDDEV_POP
STDDEV_SAMP
BIT_AND
BIT_OR
BIT_XOR
JSON_ARRAYAGG
JSON_OBJECTAGG
BOOL_AND
BOOL_OR
ANY_VALUE
✔ 你现在看到的是:完整可用集合(MySQL 8.x)
三、100% 避坑规则(记住这 3 条)
规则 1
SELECT 中出现的非聚合字段 → 必须 GROUP BY
规则 2
表达式 ≠ 字段名
plain
GROUP BY CONCAT(a, b)
不是
plain
GROUP BY title
规则 3
ONLY_FULL_GROUP_BY 不要关
👉 用 ANY_VALUE() 才是专业写法