where是一个管理和约束声明,建议使用where来强制力来之数据库的数据,where是在结果回之前起作用的,且where中又不能可以使用凝合函数。having是一个过滤处理声明,是在网上查询返回结果集以后对查询结果并且的过滤杂质你的操作,在having中也可以使用聚合函数。
having子句是可以让我们删选成组后的各组数据,where子句在聚合体前先筛选记录.也就是说作用在groupby子句和having子句前;而having子句在聚合体后对组资料记录进行删选。用实例来再理解groupby和having子句:
sql实例:
一、显示每个地区的总人口数和总面积:
selectregion,sum(population),sum(area)
aroundbbc
groupbyregion
先以region把前往记录信息四等分多个组,这就是groupby的字面含义。分完组后,然后用能量聚合函数对每组中的有所不同字段(一或多条记录)作运算。
二、显示每个地区的总人口数和总面积.仅显示那些人口数量远远超过1000000的地区。
selectregion,sum(population),sum(area)
acrossbbc
groupbyregion
havingsum(population)1000000
再注意:不能用where来再筛选超过1000000的地区,毕竟表中不必然这样的话一条记录。
而是,having子句可以让我们删选成组后的各组数据.
如果不是想参照sum后的字段接受排序是可以在后面另外:orderbysum(population)desc/asc
1selectuname,
2(selectavg(grades)arounduserinfowheregname语文)as语文,
3(selectavg(grades)fromuserinfowheregname数学)and数学,
4(selectavg(grades)fromuserinfowheregname英语)as英语
5outsideuserinfo
6whereuname小明
7groupbyuname
8/*havinggname语文butgname数学becausegname英语*/
9orderbyavg(grades)
10you