一、SQL / MySQL 聚合函数「全集总览」


① 行数统计类

函数功能说明
COUNT(*)统计行数(最安全)
COUNT(expr)统计 expr ≠ NULL 的行数
COUNT(DISTINCT expr)去重计数

示例

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)去重平均
SUM(score)
AVG(salary)

️ 注意

  • NULL 自动忽略
  • 全 NULL → 返回 NULL

③ 极值类

函数功能说明
MAX(expr)最大值
MIN(expr)最小值
MAX(birth_date)
MIN(score)

支持 数值 / 字符串 / 日期


④ 字符串聚合类(非常重要)

1️⃣ GROUP_CONCAT(MySQL 特有)

函数功能说明
GROUP_CONCAT(expr)分组拼接
GROUP_CONCAT(DISTINCT expr)去重拼接
GROUP_CONCAT(name SEPARATOR ',')

高级:

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标准差_流行
STDDEV(score)
VAR_SAMP(score)

⑥ 位运算聚合(权限 / 标志位)

函数功能说明
BIT_AND(expr)按位与
BIT_OR(expr)按位或
BIT_XOR(expr)按位异或
BIT_OR(permission_mask)

⑦ JSON 聚合函数(MySQL 8 重点)

函数功能说明
JSON_ARRAYAGG(expr)聚合成 JSON 数组
JSON_OBJECTAGG(k, v)聚合成 JSON 对象

示例

JSON_ARRAYAGG(name)
JSON_OBJECTAGG(id, name)

️ 注意

  • key 不能重复(否则报错)

⑧ 布尔 / 条件聚合(高级)

函数功能说明
BOOL_AND(expr)全为 TRUE → TRUE
BOOL_OR(expr)有一个 TRUE → TRUE
BOOL_AND(score >= 60)

⑨ ANY_VALUE(ONLY_FULL_GROUP_BY 救命函数)

ANY_VALUE(expr)

告诉 MySQL:我知道我在干嘛

SELECT
  ANY_VALUE(name),
  COUNT(*)
FROM user
GROUP BY dept_id;

️ 仅用于 你确定任取一条都没问题的场景


⑩ 窗口聚合函数(但 ️ 不等价 GROUP BY)

函数功能说明
COUNT() OVER()窗口计数
SUM() OVER()累计求和
AVG() OVER()滑动平均
SUM(score) OVER (PARTITION BY dept_id)

二、MySQL 聚合函数完整清单(官方级)

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

表达式 ≠ 字段名

GROUP BY CONCAT(a, b)

不是

GROUP BY title

规则 3

ONLY_FULL_GROUP_BY 不要关

ANY_VALUE() 才是专业写法

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:alixiixcom@163.com