一、含义:
having表达式 限定分组聚合后的查询行必须满足的条件,是对group by 分组后的数据进行筛选。
二、语法:
select 字段 from 表格 where 表达式 group by 字段 having 表达式 order by 字段 asc/desc limit 偏移量,行数
注:having 表达式放在group by 之后,order by之前。
三、具体用法:
having+聚合函数(字段) 运算符号 具体数值:放在group by之后,是对group by 分组后的数据进行筛选
例子:在world表格中,查询总人口数至少大于1亿的大洲
select continent from world group by continent
having sum(population)>=100000000
注意:having子句不能脱离group by 单独使用
四、having与where的区别
1、having的表达式与where的表达式基本相同,但是having的表达式可以使用聚合函数,where不可以,因为where是对原表数据进行筛选。
2、对行数据进行筛选时用where,对含有聚合函数的筛选用having
五、SQL运行逻辑:
1、语句的运行顺序:
from—where—group by—having—order by—limit—select
2、运行原理:
a.执行from语句是从数据库中调取复制一份表格;
b.执行where语句是在复制的表格中筛选出符合条件的数据行
c.执行group by语句是依据指定的字段对筛选后的数据进行去重分组,相当于excel建立了一个数据透视表,添加了行标签
d.执行having语句是对分组后的数据,进行满足特定条件的筛选;
e.执行order by语句是对筛选后的数据进行排序;
f.执行limit语句是对排序后的数据限制显示的行;
g.执行select语句是提取最后要显示的字段,或在group by确定的字段后添加新的聚合运算字段。
综合例题:查询总人口至少为3亿的大洲和其平均gdp,其中只有gdp高于200亿且人口数大于6000万或者gdp低于80亿且首都中含有三个a的国家计入计算,最后按照国家数从大到小排序,只显示第一行。
select continent,avg(gdp) from world
where (gdp>20000000000 and population>60000000) or (gdp<8000000000 and capital like'%a%a%a%')
group by continent having sum(population)>=300000000
order by count(name) desc limit 1