mysql集合函数有哪些常用类型_mysql统计函数入门

来源:这里教程网 时间:2026-02-28 20:43:16 作者:

MySQL
里没有叫“集合函数”的官方分类,你实际想查的是
聚合函数(Aggregate Functions)
——也就是用来对一组行做统计计算、返回单个值的函数。别被“集合”这个词带偏了,它不是指数学里的 set 操作(比如交集/并集),而是“把多行聚合成一个结果”的意思。

哪些是真正高频使用的聚合函数?

日常开发和报表中,以下 6 个几乎天天见,且必须配合

GROUP BY
使用(除非全表聚合):

COUNT()
:统计行数,
COUNT(*)
计所有行,
COUNT(col)
只计该列非
NULL
SUM()
:求和,注意字段类型要是数值型,否则隐式转为 0 或报错
AVG()
:平均值,自动忽略
NULL
,但若整列全
NULL
会返回
NULL
MAX()
/
MIN()
:取最大/最小值,支持数值、字符串、日期(字符串按字典序,日期按时间序)
GROUP_CONCAT()
:MySQL 特有,把分组内的多行拼成一个字符串,支持
DISTINCT
ORDER BY
和自定义
SEPARATOR
SELECT dep AS 部门,
       COUNT(*) AS 员工数量,
       SUM(salary) AS 薪资总和,
       AVG(salary) AS 平均薪资,
       MAX(salary) AS 最高薪资,
       MIN(salary) AS 最低薪资,
       GROUP_CONCAT(name ORDER BY salary DESC SEPARATOR ' | ') AS 员工名单
FROM emp
GROUP BY dep;

容易踩的坑:NULL、空组、类型隐式转换

聚合函数对

NULL
的处理很统一(基本都跳过),但新手常栽在这几个点上:

COUNT(col)
统计“有值人数”,却忘了该列允许
NULL
—— 结果比预期少
全表没加
WHERE
条件,但数据为空时,
SUM()
返回
NULL
而不是
0
,下游程序可能直接报空指针
对字符串字段用
AVG()
,MySQL 会尝试转成数字(如
'123abc'
123
'abc'
0
),结果毫无意义
GROUP_CONCAT()
默认长度限制是 1024 字符,超长会被截断,需提前设
GROUP_CONCAT_MAX_LEN
系统变量

进阶但实用:条件聚合与窗口函数

真要实现“同一行里算多个维度的统计”,别硬套子查询,优先用:

CASE WHEN
+ 聚合函数:例如统计各部门“高薪(>5000)人数”和“平均薪资”在同一 SELECT 中
IF()
简化布尔判断:如
SUM(IF(salary > 5000, 1, 0))
算高薪人数
MySQL 8.0+ 支持窗口函数:像
COUNT() OVER (PARTITION BY dep)
可在不
GROUP BY
的前提下补统计列,避免丢失明细行
SELECT name, dep, salary,
       COUNT(*) OVER (PARTITION BY dep) AS 部门人数,
       AVG(salary) OVER (PARTITION BY dep) AS 部门平均薪资
FROM emp;

记住一点:聚合函数本质是“降维操作”,一旦用了

GROUP BY
,SELECT 列里所有非聚合字段都必须出现在
GROUP BY
子句中,否则 MySQL 8.0+ 会直接报错(严格模式默认开启)。这不是 bug,是防止语义模糊的设计约束。

相关推荐