分享一下group by与having、where的用法:
查询语句的select 和 group by 子句是聚组函数唯一出现的地方,在where子句中不能使用聚组函数。
select deptno,sum(sal) from emp where sal > 1200 group by deptno having sum(sal) > 10000 order by deptno
当在group by 子句中使用having 子句时,查询结果赶回满足having条件的组。在一个sql语句中可以有where 子句和having子句。having与where子句类似,绝用于设置限定条件。
where子句的作用是对查询结果分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中步高寒聚组函数,使用where条件显示特定的行。
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having显示特定的组,也可以使用分组标准进行分组。
查询每个部门的每种职位的人员数
select deptno,job,count(*) from emp group by deptno,job
如果你对何时使用where何时使用having仍然疑惑,请参考以下说明:
WHERE 语句在GROUP BY 语句之前,sql会在分组之前计算结果。
HAVING 语句在GROUP BY 语句之后,sql会在分组之后计算结果。