mysql聚合函数和分组

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

文章实例的数据表,来自上一篇博客《mysql简单查询》:http://blog.csdn.net/zuiwuyuan/article/details/39349611


一、 聚合函数

聚合函数,也叫做组合函数

求所有数据数
count不统计null ,统计的是记录数
SELECT COUNT(comm) FROM emp;     #  查询emp表comm的总数
SELECT COUNT(*) FROM emp;       #  查询emp表行记录的总数
SELECT COUNT(DISTINCT deptno) FROM emp;   #  查询不重复deptno的记录总数

求平均数,忽略空值
SELECT AVG(sal) FROM emp;
SELECT AVG(comm) FROM emp;   # 2200/4=550

求和
SELECT SUM(sal) FROM emp;

求最大值
SELECT MAX(sal) FROM emp;

#求最小值
SELECT MIN(sal) FROM emp;

二、 分组

Group by字句的真正作用在于与各种聚合函数配合使用,它用来对查询出来的数据进行分组
分组的含义是: 把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录
分组函数忽略空值
结果集隐式按升序排列,如果需要改变排序方式可以使用order by字句

/**
   GROUP BY 可以根据你的分组条件对数据进行分组, 然后再进行统计
   其实,我们对部门进行分组,然后统计出分组后的聚合值(平均、最大、最小等)
*/
#查询每个部门的平均工资
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno;

#查询每个部门的员工数
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;



查询每个部门的整体工资情况
如果select语句中的列没有使用组函数,那么它就必须出现在group by字句中
而出现在group by字句中的列,不一定出现在select语句中 
SELECT deptno ,AVG(sal),MAX(sal),MIN(sal),SUM(sal),COUNT(1) 
FROM emp
GROUP BY deptno;

# 每个部门每个职位的平均工资
SELECT deptno,job,AVG(sal) FROM emp GROUP BY deptno,job;


三、 限定组的结果
HAVING字句用来对分组后的结果再进行条件过滤

# 查询部门平均工资大于2000的
# 分组后加条件: 使用having
# where和having都是用来做条件限定的,但是having只能用在group by之后
SELECT deptno ,AVG(sal),MAX(sal),MIN(sal),SUM(sal),COUNT(1) 
FROM emp
# where  AVG(sal)>2000; 此句会报错,因为在where字句中无法使用分组函数
GROUP BY deptno
HAVING AVG(sal)>2000;


where和having的区别:


   where是在分组前进行条件过滤的
   having字句是在分组后进行条件过滤的
   where字句中不能使用聚合函数
   having字句中可以使用局和函数和一般过滤条件



四: 查询结果限定

  在select语句最后可以使用limit来限定查询结果返回的起始记录和总数量
  select...limit offset_start,row_count;
  offset_start: 第一个返回记录行的偏移量,默认为0
  row_count: 要返回记录行的最大数目

SELECT * FROM emp LIMIT 5;    # 检索前五条记录
SELECT * FROM emp LIMIT 5,10; # 从第6行开始,记录行6-15(因为默认是0,所以此处的5只的是第六行记录)


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
5月前
|
算法 关系型数据库 MySQL
MySQL高级篇——排序、分组、分页优化
排序优化建议、案例验证、范围查询时索引字段选择、filesort调优、双路排序和单路排序、分组优化、带排序的深分页优化
|
5月前
|
SQL 关系型数据库 MySQL
MySQL:表的设计原则和聚合函数
本文详细介绍了数据库表设计的原则与范式,包括从需求中找到实体及其属性,确定实体间关系,并使用SQL创建具体表。文章还深入探讨了一范式、二范式和三范式的要求及不满足这些范式时可能遇到的问题。此外,文中通过实例解释了一对一、一对多和多对多关系的表设计方法,并介绍了如何使用聚合函数如 COUNT()、SUM()、AVG()、MAX() 和 MIN() 进行数据统计和分析。最后,文章还展示了如何通过 SQL 语句实现数据的复制和插入操作。
93 7
MySQL:表的设计原则和聚合函数
|
4月前
|
存储 关系型数据库 MySQL
深度剖析:MySQL聚合函数 count(expr) 如何工作?如何选择?
本文详细探讨了MySQL中count(expr)函数的不同形式及其执行效率,包括count(*)、count(1)、count(主键)、count(非主键)等。通过对InnoDB和MyISAM引擎的对比分析,解释了它们在不同场景下的实现原理及性能差异。文章还通过实例演示了事务隔离级别对统计结果的影响,并提供了源码分析和总结建议。适合希望深入了解MySQL统计函数的开发者阅读。
87 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL】-DQL(基本、条件、分组、排序、分页)详细版
通过这些查询方法,你可以高效地检索、分析和组织MySQL数据库中的数据,以满足各种应用需求。实践中,理解这些SQL语句的基础知识以及它们如何组合起来进行复杂的数据操作是至关重要的。
73 1
|
7月前
|
SQL 关系型数据库 MySQL
MySQL获取分组里的最新数据如何写sql
MySQL获取分组里的最新数据如何写sql
84 0
|
7月前
|
关系型数据库 MySQL 数据挖掘
MySQL 聚合函数案例解析:深入实践与应用
MySQL 聚合函数案例解析:深入实践与应用
|
7月前
|
SQL 关系型数据库 MySQL
MySQL 聚合函数深入讲解与实战演练
MySQL 聚合函数深入讲解与实战演练
|
8月前
|
关系型数据库 MySQL 数据库
MySQL的排序、分组、合并
MySQL的排序、分组、合并
|
8月前
|
SQL 关系型数据库 MySQL
MySQL分组查询以及having筛选
MySQL分组查询以及having筛选
41 0