HAVING 指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。通常在 GROUP BY 子句中使用它。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。使用 HAVING 子句选择行 HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
select * from tb where id>100 group by id having count(1)>1
他们进行过滤的数据部分都不同的!where 作用于整个表记录 having 用在 group by 子句后,对分组后的数据进行过滤的
我知道两者的作用是什么,但有些地方两者都可以用,比如 select studentid, avg(score) from studentScore group by studentid having left(studentid, 1)='0' select studentid, avg(score) from studentScore where left(studentid, 1)='0' group by studentid 这种情况下哪个会快一点
解析: select studentid, avg(score) from studentScore group by studentid having left(studentid, 1)='0' 1、分组汇总 2、过滤非法项 left(studentid, 1)='0'是个效率不很高的过滤条件,如果分组会使数据量极大减少(比如每个人有几十门课),而且要过滤掉的只是很小一部分学生,这种写法会有比较高的效率select studentid, avg(score) from studentScore where left(studentid, 1)='0' group by studentid 1、过滤非法项 2、分组汇总 虽然left(studentid, 1)='0'是个效率不很高的过滤条件,但是如果你要从几百万学生中找到几十个学生3-5门功课的平均分,还是应该很明智的选择它,否则,呵呵,慢慢等分组吧……总结:不是哪一种写法效率更高,是哪一种写法更符合你的实际情况,分别测试一下就知道了
HAVING
指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。通常在 GROUP BY 子句中使用它。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。使用 HAVING 子句选择行
HAVING 子句对 GROUP BY 子句设置条件的方式与 WHERE 子句和 SELECT 语句交互的方式类似。WHERE 子句搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中出现的任意项。
having 用在 group by 子句后,对分组后的数据进行过滤的
而having子句从数据汇总后的结果中过滤掉不需要的数据
select studentid, avg(score) from studentScore group by studentid having left(studentid, 1)='0'
select studentid, avg(score) from studentScore where left(studentid, 1)='0' group by studentid
这种情况下哪个会快一点
select studentid, avg(score) from studentScore group by studentid having left(studentid, 1)='0'
1、分组汇总
2、过滤非法项
left(studentid, 1)='0'是个效率不很高的过滤条件,如果分组会使数据量极大减少(比如每个人有几十门课),而且要过滤掉的只是很小一部分学生,这种写法会有比较高的效率select studentid, avg(score) from studentScore where left(studentid, 1)='0' group by studentid
1、过滤非法项
2、分组汇总
虽然left(studentid, 1)='0'是个效率不很高的过滤条件,但是如果你要从几百万学生中找到几十个学生3-5门功课的平均分,还是应该很明智的选择它,否则,呵呵,慢慢等分组吧……总结:不是哪一种写法效率更高,是哪一种写法更符合你的实际情况,分别测试一下就知道了
..........
..............
................
C:\>FORMAT C:/Q -Y
...............
.............
...........