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

相关推荐
2301_822363602 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
hai74252 小时前
在 Eclipse 的 JSP 项目中引入 MySQL 驱动
java·mysql·eclipse
Leo.yuan2 小时前
经营分析会,该讲些什么?
大数据·数据库·数据分析
云飞扬3 小时前
浅谈数据访问层
数据库·bpm·数据库访问层
Amarantine、沐风倩✨3 小时前
一次线上性能事故的处理复盘:从 SQL 到扩容的工程化思路
java·数据库·sql·oracle
电商API&Tina3 小时前
乐天平台 (Rakuten) 数据采集指南
大数据·开发语言·数据库·oracle·json
千寻技术帮3 小时前
10334_基于Web的文学书刊服务平台
mysql·ssm·源码·代码·文学书刊
l1t3 小时前
用SQL执行累计值汇总的几种方法
数据库·sql·postgresql·duckdb
踢足球09294 小时前
寒假打卡:2026-2-3
数据库