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

相关推荐
十年编程老舅32 分钟前
Linux DRM:底层逻辑与实践架构
数据库·mysql
The Sheep 20231 小时前
Vue复习
linux·服务器·数据库
云边有个稻草人1 小时前
深度解析:KingbaseES高可用架构落地原理与生产运维实战
数据库·读写分离·数据库运维·金仓数据库·国产数据库技术·数据备份恢复
满天星83035771 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
我不介意孤独2 小时前
04-记忆系统为什么向量数据库不够用
数据库·人工智能·资源隔离·agent infra
AOwhisky3 小时前
MySQL 学习笔记(第六期):MySQL 备份与恢复
运维·数据库·笔记·学习·mysql·云计算
qq21084629533 小时前
【数据库】TDengine 清理旧数据
数据库·oracle·tdengine
j_xxx404_3 小时前
MySQL表操作硬核解析:从 CREATE TABLE 到磁盘文件、ALTER TABLE 与 DDL 风险
运维·服务器·数据库·c++·mysql·adb·ai
数据库小学妹3 小时前
PostgreSQL迁移到国产数据库怎么做?评估、改造、上线全流程实操指南
数据库·经验分享·postgresql·dba
Fanta丶3 小时前
19.Mysql覆盖索引、前缀索引
mysql