周柃君

2020-08-19   阅读量: 835

Mysql

Where和having之间的区别

扫码加入数据分析学习群

按照执行顺序进行书写。

Select语句的执行顺序:

1. FROM, 2. WHERE, 3. GROUP BY, 4.HAVING, 5.SELECT,6.ORDER BY, 7.LIMIT

having作用于组,where作用于表。

例:

select deptno,job ,count(*) as 员工数

from emp

group by deptno,job; -- 先执行from后面的字段

select deptno,job,avg(sal) as 平均工资

from emp

group by deptno,job having job='clerk'; ---先分组再筛选

select deptno,job,avg(sal) as 平均工资

from emp

where job='clerk'

group by deptno; ---先筛选再分组进行聚合运算(where的效率更高,计算量更小)

having存在的意义:where只能存现在from的后面,where中不能出现聚合函数,不能出现在group by(在分组的同事进行聚合运算)后面,否则会出现书写顺序错误。

select deptno, avg(sal) as 平均工资

from emp

group by deptno

having avg(sal)>2000; -- 对分好的组进行筛选只能使用having。

select deptno, avg(sal) as 平均工资

from emp

group by deptno

where avg(sal)>2000; -- 报错:书写顺序不正确。

select deptno, avg(sal) as 平均工资

from emp

where avg(sal)>2000,

group by deptno -- 报错:where子句中不能用聚合函数,先执行where,再执行group by和聚合运算。

select deptno, avg(sal) as 平均工资

from emp

group by deptno

having 平均工资>2000; --having中用平均工资(即在select定义好的别名,在MySQL5.7之后的版本)。


添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
27.8568 2 0 关注作者 收藏

评论(0)


暂无数据

推荐课程