一文掌握 MySQL 聚合函数(含语法 + 示例 + 实战)


🚀 一文掌握 MySQL 聚合函数(含语法 + 示例 + 实战)

聚合函数是数据库查询中最常用也最基础的功能之一,常用于统计、分析数据。本文将系统介绍 MySQL 中常用的聚合函数:COUNT()SUM()AVG()MAX()MIN()GROUP_CONCAT(),并配合 GROUP BYHAVING 展示完整应用场景。


✅ 一、什么是聚合函数?

聚合函数(Aggregate Functions)是用于对一组数据进行汇总计算并返回一个单一值的函数。

通俗点说:聚合函数不关心单条记录,而是**“一堆值算出一个结果”**,比如统计数量、求总和、找最大/最小值等。


📦 二、MySQL 常用聚合函数总览

函数功能示例
COUNT()统计数量COUNT(*) 计算总行数
SUM()求和SUM(salary) 求工资总和
AVG()平均值AVG(score) 求平均分
MAX()最大值MAX(age) 最大年龄
MIN()最小值MIN(price) 最低价格
GROUP_CONCAT()拼接字符串拼接一列值为逗号分隔字符串

🧮 三、每个函数详细解析 + 示例

1. COUNT() – 统计数量

🔹 语法:
COUNT(*)              -- 统计所有行(包括 NULL)
COUNT(column_name)    -- 统计指定列的非 NULL 行数
🔹 示例:
-- 统计员工总数
SELECT COUNT(*) FROM employee;

-- 统计有工资记录的员工数(过滤 NULL)
SELECT COUNT(salary) FROM employee;

2. SUM() – 求和函数

🔹 语法:
SUM(column_name)
🔹 示例:
-- 所有员工工资总和
SELECT SUM(salary) FROM employee;

-- 每个部门的总工资
SELECT department, SUM(salary)
FROM employee
GROUP BY department;

3. AVG() – 平均值函数

🔹 语法:
AVG(column_name)
🔹 示例:
-- 所有员工的平均工资
SELECT AVG(salary) FROM employee;

-- 每个部门的平均工资
SELECT department, AVG(salary)
FROM employee
GROUP BY department;

4. MAX() – 最大值函数

🔹 语法:
MAX(column_name)
🔹 示例:
-- 查询最高工资
SELECT MAX(salary) FROM employee;

-- 每个部门的最高工资
SELECT department, MAX(salary)
FROM employee
GROUP BY department;

5. MIN() – 最小值函数

🔹 语法:
MIN(column_name)
🔹 示例:
-- 查询最低工资
SELECT MIN(salary) FROM employee;

-- 每个部门的最低工资
SELECT department, MIN(salary)
FROM employee
GROUP BY department;

6. GROUP_CONCAT() – 字符串拼接函数

🔹 语法:
GROUP_CONCAT(column [SEPARATOR '分隔符'])
🔹 示例:
-- 把所有员工的名字拼接成一行
SELECT GROUP_CONCAT(name) FROM employee;

-- 每个部门的员工名字拼接展示
SELECT department, GROUP_CONCAT(name)
FROM employee
GROUP BY department;

-- 自定义分隔符为 " | "
SELECT GROUP_CONCAT(name SEPARATOR ' | ')
FROM employee;

🧑‍🔬 四、与 GROUP BY 联合使用

聚合函数最常见的搭档就是 GROUP BY ——用于按某一列进行分组统计。

示例:统计每个部门的员工人数和平均工资
SELECT department, COUNT(*) AS 人数, AVG(salary) AS 平均工资
FROM employee
GROUP BY department;
示例:统计每个部门工资总和大于 50000 的部门
SELECT department, SUM(salary) AS 总工资
FROM employee
GROUP BY department
HAVING SUM(salary) > 50000;

❗ 五、使用聚合函数时的注意事项

注意点
1️⃣COUNT(*) 包括 NULL;COUNT(column) 不包括 NULL
2️⃣聚合函数忽略 NULL 值(除了 COUNT(*)
3️⃣除非配合 GROUP BY,否则只返回一行数据
4️⃣HAVING 是对聚合后的结果过滤,不能用 WHERE 替代
5️⃣GROUP_CONCAT() 有长度限制(默认 1024,可通过 group_concat_max_len 修改)

🧠 六、面试常问聚合问题(附解答思路)

💬 Q1:COUNT(*)COUNT(column) 有何区别?

  • COUNT(*):统计所有行,不管有没有 NULL;
  • COUNT(column):只统计该列不为 NULL 的记录数。

💬 Q2:如何筛选平均工资大于 10000 的部门?

SELECT department, AVG(salary)
FROM employee
GROUP BY department
HAVING AVG(salary) > 10000;

💬 Q3:怎么把某个分组的名字合并成一个字符串?

SELECT department, GROUP_CONCAT(name)
FROM employee
GROUP BY department;

✅ 七、总结

函数用途
COUNT()计数量
SUM()求总和
AVG()求平均
MAX()最大值
MIN()最小值
GROUP_CONCAT()合并字符串

聚合函数让你可以轻松实现报表统计、业务分析、分组汇总、数据聚合等操作,是 SQL 中的核心武器!


📌 八、推荐练习题(可选)

  1. 查询每个部门的最高工资和最低工资
  2. 统计每个岗位的员工人数
  3. 查询工资总和大于 50000 的所有岗位
  4. 查询员工名字拼接成一行的结果
  5. 查询所有员工的平均工资,去掉 NULL 工资值的影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值