当前位置:网站首页>MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询
MySQL --- 数据库查询 - 聚合函数的使用、聚合查询、分组查询
2022-07-04 19:17:00 【小雪菜本菜】
聚合函数(统计函数)
SQL 允许对表中的数据进行计算,将表中每一列数据作为一个整体,进行纵向计算。
column 表示字段名,对某一字段进行某些操作
MAX、MIN、COUNT 不会对空值进行计算
COUNT(*) 返回所有列的行数,包含空值
其中 COUNT 函数可用于任何数据类型 (因为它只是记录行数),而 SUM 、AVG 函数都只能对数值类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。
1.统计该企业员工数量
SELECT COUNT(*) FROM emp;
注意 COUNT() 不会把空值计算在内
SELECT COUNT(mgr) FROM emp;
2.统计该企业员工的平均工资
SELECT AVG(sal) FROM emp;
3.查询该企业员工的最高工资
SELECT MAX(sal) FROM emp;
4.查询该企业员工的最低工资
SELECT MIN(sal) FROM emp;
5.计算所有销售的工资之和
SELECT sal FROM emp WHERE job='salesman';
SELECT SUM(sal) FROM emp WHERE job='salesman';
分组查询
聚合函数实际上就是一些统计函数。
接下来我们来学习分组统计查询。
需要声明一点的是,虽然说统计函数一般是搭配分组查询,但是单独使用的情况一定是有的。例如:在做报表显示的时候基本的分页操作,一定要查询出全部的数据。
那么什么是分组呢?
分组这个概念在生活中其实是很常见的,比如有以下需求:
1.在一个班级之中,要求男女各一组进行辩论赛
2.在公司中,要求每个部门一组进行拔河比赛
对于第一个需求,假设存在学生表,那么在学生表之中一定会存在一个性别字段,性别只可能是男或者女。
而在公司之中,如果要进行部门分组,肯定需要一个部门列的内容存在重复。部门和员工是一对多的关系,一个部门对应多个员工。
分组只对数据有重复的字段才有意义,我们可以先查看 emp 表,找到可以分组的字段职位 job 和部门编号 deptno。
首先员工编号 empno 不能是重复的,如果重复了,就是同一个人,姓名 ename 一般也不会存在重复的
语法
GROUP BY 后面写上要对哪一个字段进行分组
HAVING 对分组之后对分组的数据进行筛选
WHERE 对分组之前的数据进行筛选
HAVING 对分组之后的数据进行筛选
SELECT 分组字段/聚合函数 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后条件];
查询需求
1.统计出每个工作岗位的人数,输出所有的工作岗位,然后对它进行分组,多个重复的算是一组里面,最后对每一组统计岗位里面有多少人
SELECT job,COUNT(*) FROM emp GROUP BY job;
2.统计出每种职位的最低和最高工资
-- 统计出每种职位
SELECT job FROM emp GROUP BY job;
SELECT job,MIN(sal),MAX(sal) FROM emp GROUP BY job;
以上两个查询就实现了分组的基本操作,而且这些代码都按照标准格式进行了编写。可是在分组之中,个人认为最麻烦的地方就是在于分组操作的若干限制。
注意事项
1.如果一个查询之中(不存在GROUP BY
子句),那么在SELECT
子句之中只允许出现统计函数,其他任何字段都不允许出现。
有统计函数的时候,其他任何字段都不允许出现。
#错误的语句
SELECT ename,COUNT(job) FROM emp;
#正确的语句
SELECT COUNT(job) FROM emp;
2.在统计查询之中(存在GROUP BY
子句),SELECT
子句之中只允许出现统计函数和分组字段(GROUP BY
之后定义的字段),其他的任何字段都不允许出现。
#错误的语句
SELECT ename,COUNT(job) FROM emp GROUP BY job;
#正确的语句
SELECT deptno,COUNT(job) FROM emp GROUP BY job;
在以后进行分组操作的时候,本着一个原则:GROUP BY
子句之中允许出现的字段才是SELECT
子句中允许出现的字段。
查询需求
1.显示不同职位薪资少于1500的人数
-- 显示不同职位
SELECT job FROM emp GROUP BY job;
-- 显示不同职位的人数
SELECT job,COUNT(*) FROM emp GROUP BY job;
-- 显示不同职位薪资少于1500的人数
SELECT job,COUNT(*) FROM emp WHERE sal<1500 GROUP BY job;
2.多加一个限制条件,只显示人数大于 2 的,其实就是第 1 题的结果再进行一个筛选
SELECT job,COUNT(*) FROM emp WHERE sal<1500 GROUP BY job HAVING COUNT(*)>2;
3.显示非销售人员(salesman)工作名称以及从事同一工作的员工的月工资的总和,并且要满足从事同一工作的员工的月工资合计大于等于5000
SELECT job FROM emp WHERE job!='salesman';
SELECT job,SUM(sal) FROM emp WHERE job!='salesman' GROUP BY job;
SELECT job,SUM(sal) AS total FROM emp WHERE job!='salesman' GROUP BY job HAVING total>=5000;
WHERE和HAVING区别
WHERE:是在分组之前使用(可以没有GROUP BY),不允许使用统计函数。
HAVING:是在分组之后使用(必须结合GROUP BY),允许使用统计函数。
边栏推荐
- 左右最值最大差问题
- word中使用自动插入题注功能
- C server log module
- Implementation of redis distributed lock
- Flet教程之 04 FilledTonalButton基础入门(教程含源码)
- 【深度学习】一文看尽Pytorch之十九种损失函数
- 2022 version of stronger jsonpath compatibility and performance test (snack3, fastjson2, jayway.jsonpath)
- Redis分布式锁的实现
- 15million employees are easy to manage, and the cloud native database gaussdb makes HR office more efficient
- Record the online bug solving list (unfinished to be continued 7/4)
猜你喜欢
[in-depth learning] review pytoch's 19 loss functions
阿里测试师用UI自动化测试实现元素定位
强化学习-学习笔记2 | 价值学习
实操自动生成接口自动化测试用例
What if the win11 shared file cannot be opened? The solution of win11 shared file cannot be opened
太方便了,钉钉上就可完成代码发布审批啦!
What if the computer page cannot be full screen? The solution of win11 page cannot be full screen
Flet tutorial 04 basic introduction to filledtonalbutton (tutorial includes source code)
idea恢复默认快捷键
[today in history] July 4: the first e-book came out; The inventor of magnetic stripe card was born; Palm computer pioneer was born
随机推荐
How does win11 search for wireless displays? Win11 method of finding wireless display device
idea配置标准注释
Practice examples to understand JS strong cache negotiation cache
Flet教程之 06 TextButton基础入门(教程含源码)
栈:如何实现有效括号的判断?
记录线上bug解决list(未完待续7/4)
漫谈客户端存储技术之Cookie篇
Record the online bug solving list (unfinished to be continued 7/4)
In operation (i.e. included in) usage of SSRs filter
为什么最大速度是光速
Huawei cloud store homepage banner resource bit application
记一次 .NET 某工控数据采集平台 线程数 爆高分析
What financial products can you buy with a deposit of 100000 yuan?
The problem of the maximum difference between the left and right maxima
C server log module
【ISMB2022教程】图表示学习的精准医疗,哈佛大学Marinka Zitnik主讲,附87页ppt
E-week finance | Q1 the number of active people in the insurance industry was 86.8867 million, and the licenses of 19 Payment institutions were cancelled
node强缓存和协商缓存实战示例
九齐NY8B062D MCU规格书/datasheet
How does the computer save web pages to the desktop for use