MySQL 聚合函数深入讲解与实战演练

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL 聚合函数深入讲解与实战演练

在处理大量数据时,聚合函数是SQL查询中不可或缺的一部分,它们帮助我们对数据进行汇总、分析,提取出关键信息。MySQL支持多种聚合函数,如COUNT()SUM()AVG()MAX()MIN()以及更高级的GROUP_CONCAT()STDDEV()等。本文将深入探讨这些聚合函数的用法,结合具体实例,让你掌握如何高效地在MySQL中进行数据聚合。

一、COUNT()

COUNT()函数用来计算行数,可以统计表中的所有行数或者满足特定条件的行数。

统计总行数

SELECT COUNT(*) FROM employees;

统计非空值

SELECT COUNT(salary) FROM employees;

二、SUM()

SUM()函数用于计算一列数值的总和。

SELECT SUM(salary) FROM employees;

三、AVG()

AVG()函数计算一列数值的平均值。

SELECT AVG(salary) FROM employees;

四、MAX() & MIN()

MAX()MIN()分别用于找出一列中的最大值和最小值。

SELECT MAX(age), MIN(age) FROM employees;

五、GROUP BY与聚合函数的结合

通过GROUP BY子句,可以将数据分为多个组,然后对每个组应用聚合函数。

按部门统计平均薪资

SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;

六、GROUP_CONCAT()

GROUP_CONCAT()函数用于将同一组内的值连接成字符串,常用于生成列表或标签云。

SELECT department, GROUP_CONCAT(name SEPARATOR ', ') AS employees_list
FROM employees
GROUP BY department;

七、更高级的聚合函数

除了上述常用函数,MySQL还提供了如STDDEV()(标准差)、VARIANCE()(方差)等,用于统计分析。

计算薪资的标准差

SELECT STDDEV(salary) AS salary_stddev FROM employees;

八、WITH ROLLUP的使用

WITH ROLLUP可以在GROUP BY查询的结果基础上,额外生成一个汇总行。

SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department WITH ROLLUP;

这将不仅按部门分组计算平均薪资,还会在最后提供一个总体的平均薪资。

九、实战演练:员工薪资分析

假设有employees表,包含idnamedepartmentsalary字段,下面是一个综合应用案例,演示如何使用聚合函数进行数据分析。

任务

  1. 统计各部门员工数量。
  2. 计算公司整体的平均薪资、最高薪资和最低薪资。
  3. 分析各部门的平均薪资,并找出平均薪资最高的部门。
  4. 列出每个部门的员工名单。

SQL脚本

-- 1. 统计各部门员工数量
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

-- 2. 计算整体平均薪资、最高薪资和最低薪资
SELECT AVG(salary) AS overall_avg_salary, 
       MAX(salary) AS max_salary, 
       MIN(salary) AS min_salary
FROM employees;

-- 3. 分析各部门平均薪资,并找出平均薪资最高的部门
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
ORDER BY avg_salary DESC
LIMIT 1;

-- 4. 列出每个部门的员工名单
SELECT department, GROUP_CONCAT(name SEPARATOR ', ') AS employee_names
FROM employees
GROUP BY department;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10天前
|
关系型数据库 MySQL Linux
【一键解锁神秘力量!】CentOS 7 通过编译源码方式安装 MySQL 数据库 —— 从零到英雄的数据库安装实战秘籍!
【8月更文挑战第9天】随着业务增长,对数据库的需求日益提高。在 CentOS 7 中,通过编译源码安装 MySQL 可提供更高定制性和灵活性。本文详细介绍从准备环境、下载源码、配置编译参数到安装 MySQL 的全过程,并对比 RPM 包安装方法,帮助读者根据需求选择合适方案。实践时需注意备份数据、选择合适版本、确保安全性和调优性能等要点。
53 1
|
14天前
|
存储 关系型数据库 MySQL
MySQL数据库进阶实战:解锁性能飙升秘籍,从菜鸟到高手的华丽蜕变,让数据操作如行云流水!
【8月更文挑战第5天】MySQL是最流行的开源关系型数据库之一,在Web开发与数据分析等领域广泛应用。本文通过实战代码示例,深入探讨MySQL进阶技能:包括索引优化以提升查询性能;利用JOIN与子查询处理多表关联数据;通过事务处理确保数据一致性;使用存储过程与函数封装复杂逻辑以便重用;设置触发器自动执行特定任务以维护数据完整性。掌握这些技能能显著提高数据处理效率与系统性能。
19 5
|
1天前
|
canal 关系型数据库 MySQL
"揭秘阿里数据同步黑科技Canal:从原理到实战,手把手教你玩转MySQL数据秒级同步,让你的数据处理能力瞬间飙升,成为技术界的新晋网红!"
【8月更文挑战第18天】Canal是一款由阿里巴巴开源的高性能数据同步系统,它通过解析MySQL的增量日志(Binlog),提供低延迟、可靠的数据订阅和消费功能。Canal模拟MySQL Slave与Master间的交互协议来接收并解析Binary Log,支持数据的增量同步。配置简单直观,包括Server和Instance两层配置。在实战中,Canal可用于数据库镜像、实时备份等多种场景,通过集成Canal Client可实现数据的消费和处理,如更新缓存或写入消息队列。
8 0
|
7天前
|
存储 关系型数据库 MySQL
MySQL中的DISTINCT与GROUP BY:效率之争与实战应用
【8月更文挑战第12天】在数据库查询优化中,DISTINCT和GROUP BY常常被用来去重或聚合数据,但它们在实现方式和性能表现上却各有千秋。本文将深入探讨两者在MySQL中的效率差异,结合工作学习中的实际案例,为您呈现一场技术干货分享。
38 0
|
1月前
|
关系型数据库 MySQL 数据挖掘
MySQL 聚合函数案例解析:深入实践与应用
MySQL 聚合函数案例解析:深入实践与应用
|
1月前
|
关系型数据库 MySQL Linux
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
Linux部署实战前言,MySQL在CentOS安装【单机软件】,MySQL的安装需要root权限,yum install mysql,systemctl enable mysqld开机自启的意思
|
5天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
19 0
|
8天前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
29 6
|
5天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
7天前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。