MySQL聚合函数在查询中的五大核心应用

一、前言

在数据库查询中,聚合函数是我们进行数据统计和分析的利器。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聚合函数!如果您有任何问题或建议,欢迎在评论区留言交流。

相关推荐
IvorySQL1 分钟前
速看!HOW 2026 12 大分论坛出品人集结
数据库·postgresql·开源
V1ncent Chen6 分钟前
SQL大师之路 11 外连接和自连接
数据库·sql·mysql·数据分析
zklgin7 分钟前
PostgreSQL常用时间函数与时间计算提取示例说明
数据库·postgresql
曾阿伦9 分钟前
SQL CRUD 用法详解:从入门到实战的完整指南
数据库·sql
gaozhiyong08139 分钟前
SpringBoot连接多数据源MySQL、SqlServer等(MyBatisPlus测试)
spring boot·mysql·sqlserver
让学习成为一种生活方式9 分钟前
Swiss-Prot 注释--生信工具079
数据库
2601_9486061818 分钟前
MySQL B+树索引高度计算与性能阈值探讨
数据库·b树·mysql
lierenvip20 分钟前
mysql用户名怎么看
数据库·mysql
qq_4160187220 分钟前
用户认证与授权:使用JWT保护你的API
jvm·数据库·python
KKKlucifer1 小时前
国产化适配与自主可控:国内安全厂商文档安全平台核心技术构建
大数据·数据库·人工智能