group by 是用于分组的。是使用group by 时如果要加条件(相当于where)就要使用having子句。
group by 可以不使用having(没有条件来约束它);、
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
having 子句被限制子已经在select语句中定义的列和聚合表达式上。通常,你需要通过在having子句中重复聚合函数表达式来引用聚合值。
having依赖于group by
用于分组后更方便的筛选,不用group by也能筛选出结果
如:
1.显示名字和条数大于1的
select name ,count(*) from tablename group by name having count(*)>1;
2.查询系名字和平均工资小于1800的
select deptName,avg(saliry)
from tablename
group by deptName
having avg(saliry)<1800;
等价于:
select *
from
(
select deptName,avg(saliry)
from tablename
group by deptName
) as newTable
where avg(saliry)<1800;
--> having性能更高,代码更简洁
关于能够用于条件筛选的
on:联结(join)筛选
where: 一般条件筛选
having: 分组后的条件筛选 |