MySQL 聚合函数

一、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() 才是专业写法

相关推荐
zhangphil14 分钟前
Android main thread主线程Choreographer doFrame发生FullSuspendCheck
android
二进制漫游记25 分钟前
FastAPI项目集成 Qdrant向量数据库+阿里云Embedding完整实战(工具封装+业务调用)
数据库·python·阿里云·embedding
2501_9289962228 分钟前
GPT-4o换DeepSeek迁移成本多少?中科热备解析API聚合平台技术账本
前端·数据库·人工智能
泡干脆面就番茄3 小时前
MySQL_子查询_分页查询与联合查询详解
数据库·mysql
devpotato4 小时前
缓存与数据库更新顺序不一致问题
java·数据库·redis
天若有情6734 小时前
Node+MySQL小型全栈笔记项目实战课程分享
数据库·笔记·mysql
TimeFine4 小时前
智能眼镜开发:获取真实的音频路由
android
pengyu4 小时前
【Kotlin 协程修仙录 · 渡劫境 · 中阶】 | 造化神兵:自定义 CoroutineDispatcher 与调度器的终极定制
android·kotlin
wxwx_bscxy3224 小时前
基于springboot宠物领养系统的设计与实现
数据库·spring boot·后端·spring·宠物
pengyu5 小时前
【Kotlin 协程修仙录 · 渡劫境 · 初阶】 | 飞升雷劫:CPS 变换与挂起函数字节码终极透视
android·kotlin