select 班号,avg(身高) as 女生平均身高
from 学生表
where 性别='女'
group by 班号
select 班号,avg(身高) as 女生平均身高
from 学生表
group by 班号,性别
having 性别='女'
1.你第一段sql,以班号分组,筛选性别为女,得到结果为各班级的女生平均身高;
2.你第二段sql,以班号、性别分组,having筛选性别为女,目的也为查询各班的女生平均身高;
3.执行结果上,第二段sql执行不了,原因是你group by 后的字段在select后没有写,如果select 班号,性别, avg (身高)是可以执行的;
4.解析: where和having都是筛选条件,where是对from后的表进行条件筛选,having是对group by之后的数据集进行筛选。两者都是筛选条件,结果可以雷同,但是意义不同,而且可用where就先用where,再用haivng。题主对于sql执行先后顺序可以再去看看。希望对你有所帮助。
group by后面可以跟多个字段的
了解一下SQL的执行顺序,在你的这句里面,先执行的from ,然后是where 子句,接着group by分组,最后才是having过滤。你把过滤都放到having去过滤的话,就像你准备做一斤包子,买了整袋面粉,半边猪,全部做成肉包子,然后只取里面的1斤,其余的全扔掉。
更有效率的做法是,买一斤包子需要的面粉和猪肉(where里面过滤),再去做成包子
效率最高的方法:直接去买一斤肉包子(数据仓库提起汇总好数据,你直接拿来用)
你第二个sql不就是加了多个字段
group by 后面可以增加多个字段实现分组;两个SQL查询结果一致,是因为where基于行进行过滤,having基于组进行过滤,推荐使用第一个SQL。