一、前言
在数据库查询中,聚合函数是我们进行数据统计和分析的利器。MySQL提供了丰富的聚合函数,能够帮助我们从海量数据中提取有价值的信息。本文将详细介绍五大核心聚合函数的应用场景和使用技巧,并通过实例演示其强大功能。
二、聚合函数概述
2.1 什么是聚合函数?
聚合函数对一组值执行计算,并返回单个值。它们通常与GROUP BY子句结合使用,对数据进行分组统计。
2.2 常用聚合函数概览

三、COUNT()函数:数据计数专家
3.1 基本语法
bash
sql
-- 统计总行数
SELECT COUNT(*) FROM table_name;
-- 统计特定列非空值的数量
SELECT COUNT(column_name) FROM table_name;
-- 统计不重复值的数量
SELECT COUNT(DISTINCT column_name) FROM table_name;
3.2 实际应用示例
bash
sql
-- 创建示例数据表
CREATE TABLE employees (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2),
hire_date DATE
);
-- 插入测试数据
INSERT INTO employees (name, department, salary, hire_date) VALUES
('张三', '技术部', 15000.00, '2020-03-15'),
('李四', '技术部', 18000.00, '2019-07-22'),
('王五', '销售部', 12000.00, '2021-01-10'),
('赵六', '销售部', 10000.00, '2021-06-30'),
('孙七', '人事部', 8000.00, '2022-03-01');
-- 统计员工总数
SELECT COUNT(*) AS total_employees FROM employees;
-- 结果:5
-- 统计各部门员工数量
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department
ORDER BY employee_count DESC;
-- 结果:
-- | department | employee_count |
-- |------------|----------------|
-- | 技术部 | 2 |
-- | 销售部 | 2 |
-- | 人事部 | 1 |
-- 统计有薪水的员工数量(排除NULL)
SELECT COUNT(salary) AS employees_with_salary FROM employees;
四、SUM()函数:数值求和大师
4.1 基本语法
bash
sql
-- 计算单列总和
SELECT SUM(column_name) FROM table_name;
-- 计算分组后的总和
SELECT group_column, SUM(column_name)
FROM table_name
GROUP BY group_column;
4.2 实际应用示例
bash
sql
-- 计算公司总薪资支出
SELECT SUM(salary) AS total_salary_expense FROM employees;
-- 结果:63000.00
-- 计算各部门薪资总额
SELECT department, SUM(salary) AS department_salary_total
FROM employees
GROUP BY department;
-- 结果:
-- | department | department_salary_total |
-- |------------|-------------------------|
-- | 技术部 | 33000.00 |
-- | 销售部 | 22000.00 |
-- | 人事部 | 8000.00 |
-- 结合条件查询
SELECT department,
SUM(salary) AS total_salary,
SUM(CASE WHEN YEAR(hire_date) >= 2021 THEN salary ELSE 0 END) AS new_hire_salary
FROM employees
GROUP BY department;
五、AVG()函数:平均值计算器
5.1 基本语法
bash
sql
-- 计算单列平均值
SELECT AVG(column_name) FROM table_name;
-- 计算分组后的平均值
SELECT group_column, AVG(column_name)
FROM table_name
GROUP BY group_column;
5.2 实际应用示例
bash
sql
-- 计算公司平均薪资
SELECT AVG(salary) AS average_salary FROM employees;
-- 结果:12600.00
-- 计算各部门平均薪资
SELECT department,
AVG(salary) AS avg_salary,
COUNT(*) AS employee_count
FROM employees
GROUP BY department
ORDER BY avg_salary DESC;
-- 结果:
-- | department | avg_salary | employee_count |
-- |------------|------------|----------------|
-- | 技术部 | 16500.00 | 2 |
-- | 销售部 | 11000.00 | 2 |
-- | 人事部 | 8000.00 | 1 |
-- 计算平均薪资并保留两位小数
SELECT department,
ROUND(AVG(salary), 2) AS avg_salary_rounded
FROM employees
GROUP BY department;
六、MAX()函数:最大值查找器
6.1 基本语法
bash
sql
-- 查找单列最大值
SELECT MAX(column_name) FROM table_name;
-- 查找分组后的最大值
SELECT group_column, MAX(column_name)
FROM table_name
GROUP BY group_column;
6.2 实际应用示例
bash
sql
-- 查找最高薪资
SELECT MAX(salary) AS highest_salary FROM employees;
-- 结果:18000.00
-- 查找各部门最高薪资及对应员工
SELECT e.department, e.name, e.salary
FROM employees e
INNER JOIN (
SELECT department, MAX(salary) AS max_salary
FROM employees
GROUP BY department
) dept_max ON e.department = dept_max.department AND e.salary = dept_max.max_salary;
-- 查找最近入职的员工
SELECT MAX(hire_date) AS latest_hire_date FROM employees;
-- 结果:2022-03-01
-- 查找各部门最新入职日期
SELECT department, MAX(hire_date) AS latest_hire
FROM employees
GROUP BY department;
七、MIN()函数:最小值查找器
7.1 基本语法
bash
sql
-- 查找单列最小值
SELECT MIN(column_name) FROM table_name;
-- 查找分组后的最小值
SELECT group_column, MIN(column_name)
FROM table_name
GROUP BY group_column;
7.2 实际应用示例
bash
sql
-- 查找最低薪资
SELECT MIN(salary) AS lowest_salary FROM employees;
-- 结果:8000.00
-- 查找各部门最低薪资
SELECT department, MIN(salary) AS min_salary
FROM employees
GROUP BY department;
-- 查找最早入职的员工
SELECT name, hire_date
FROM employees
WHERE hire_date = (SELECT MIN(hire_date) FROM employees);
-- 结果:李四, 2019-07-22
-- 查找各部门最早入职日期
SELECT department, MIN(hire_date) AS earliest_hire
FROM employees
GROUP BY department;
总结
MySQL的聚合函数是数据分析和统计的强大工具,掌握它们能够让我们:
快速获取数据的概要信息
进行复杂的数据分析和报表生成
优化查询性能,提高数据处理效率
在实际应用中,我们应该根据具体需求选择合适的聚合函数,并结合GROUP BY、HAVING等子句,灵活构建查询语句。同时,注意对大数据表进行聚合查询时的性能优化,合理使用索引和查询策略。
希望本文能够帮助您更好地理解和应用MySQL聚合函数!如果您有任何问题或建议,欢迎在评论区留言交流。