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聚合函数!如果您有任何问题或建议,欢迎在评论区留言交流。

相关推荐
名字还没想好☜3 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
ltl4 小时前
Serverless 数据库弹性理论:Neon 与 Aurora Serverless v2
数据库
Dxy12393102165 小时前
Python 如何使用 MySQL 的事务
python·mysql
marvelyu8 小时前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库
ZCBUS实时计算9 小时前
金融证券实时数仓建设实践:轻量化实时计算平台落地,实现交易数据端到端秒级处理
大数据·数据库·数据仓库·金融·flink·dba·etl
zd2005729 小时前
海洋微生物数据库
数据库·宏基因组
海上小飞龙9 小时前
Redis 分布式锁原理:从 SET NX EX 到 Redisson 看门狗
数据库·redis·分布式
xiaoye-duck10 小时前
MySQL 表约束全解:从基础约束到外键关联规则
数据库·mysql
Hammer_Hans10 小时前
DFT笔记98
java·开发语言·数据库
迪康Defender10 小时前
从静态存储到动态流转:终端透明加密两种模式实战解析
运维·服务器·网络·数据库·其他