在mysql中having的用法以及与where区别介绍
技术  /  管理员 发布于 7年前   183
having 和 where 区别
- having是对一个表的数据进行分组之后,对组信息进行相应条件筛选 - having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定 - having子句与where子句一样,都是用于条件判断 - where是判断数据从磁盘读入内存的时候 - having是判断分组统计之前的所有条件 - having子句中可以使用字段别名,而where不能使用 - having能够使用统计函数,而where不能使用
MySQL 中的 group by 语句
1.group by 是将具有相同的进行分组,化成一块数据集合,配置聚合函数进行数据处理,比如:全校学生成绩表 (学号,姓名,班级,成绩….),现在我需要将按照相同的班级进行分类,之后计算出每个班的最高的成绩。
1.1 创建好 student_score 表
SID SNAME CLASS total_score
1.2
按照班级进行分类:以班级分类为主
按照班级分类:计算出每个班的最高的成绩
select CLASS, SNAME from student_score group by CLASS, SNAME;
select CLASS, MAX(TOTAL_SCORES) AS TOP from student_score group by CLASS;
2.group by 需要注意的几点
group by语句通常配合聚合函数SUM、MAX、MIN等使用处理数据。
group by语句中使用的聚合函数处理数据是group by分组完毕之后聚合函数是对分组数据进行处理的,不是对整个表。
比如group by之后一班的成绩有250、251、253、254。
聚合函数MAX()是针对一班这四个数据计算的。并不是MAX()整个表。
select后面的查询字段要包含在group by后面的字段中
select后面的列要包含在group by后面的列中
MySQL 的 having 语句
1.having 与 where 的区别
(1)where
- 作用在查询结果进行分组之前,过滤掉不符合条件的数据 - where中不能包含聚合函数(注意:where后面子句不能有聚合函数,在含有where中可以使用聚合函数) - 作用在group by和having子句前 - 作用于对表与视图
(2)having
- 作用在查询结果分组之后,筛选满足条件的组,过滤掉数据 - 通常跟聚合函数一起使用 - having子句在聚合后对组记录进行筛选 - 作用于分组
2. 使用 having 例子
(1)计算出每个班级的总成绩
SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS;
(2)筛选出总成绩大于 505 的班级
SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>505;
这里用 where SUM (TOTAL_SCORES)>505 的话,将会出错,因为表中根本没有总成绩分数这项,这是分组之后才有的
3. 使用 having 与 where 联立的例子 利用 having 与 where 联立查询
实例:
查询班级中分数大于 250 的学生的总成绩大于 531 的班级有哪几个班。
执行顺序为:
开始 -> where 行记录筛选 -> group by 分组 -> 聚合函数 (sum、max、min) 计算 -> having 分组筛选 -> 结束
具体的如下:
- where筛选学生成绩大于90的所有学生。
- group by分组班级
- sum计算分组班级中学生的总分数
- having筛选总成绩大于531的班级
具体代码如下:
-- 1.WHERE筛选出分数大于90的学生
SELECT CLASS,SNAME,TOTAL_SCORES FROM student_score WHERE TOTAL_SCORES>90;
-- 2.SUM计算之后,having筛选总成绩大于531的分组
SELECT CLASS,SUM(TOTAL_SCORES) AS SUM_SCORE FROM student_score
WHERE TOTAL_SCORES>250
GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>531;
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号