分组查询
COUNT() SUM() AVG() MAX() MIN()
范例:
统计公司的总年薪:
统计最早,最迟雇员
请解释:
"COUNT(*) COUNT(字段) COUNT(DISTINCT 字段 )的区别
COUNT(*) 会实际的统计表中的数量
COUNT(字段) null字段不参与统计
COUNT(DISTINCT 字段)消除重复字段的统计
只有清楚了这个可以开始上分组统计了
什么情况下有可能分组:
分组就是某些群体具有相同的特征。
例如emp表中,job和deptno是可以分组的字段
但是一定要记住,一条记录也是可以分组的,但是没有什么实际的意义
范例:按照职位分组,统计每个职位的平均工资,以及最高工资和最低工资,人数。
分组函数
Max min
select ename , sal from emp where sal = (select max(sal) from emp ) ;
查询工资最多的员工是谁
count
select count(*) from emp ; 查询员工数量
sum ave
select avg(sal) from emp ;
select sum(sal)/count(*) from emp ;
算出平均工资
Group by 和 having
select avg(sal) , max(sal) ,deptno from emp group by deptno ;
显示每个部门的平均工资和最高工资。
select avg(sal) , max(sal) ,deptno , job from emp group by deptno , job order by deptno;
显示每个部门的每个岗位的平均工资和最高工资。
select avg(sal) , max(sal) , deptno from emp group by deptno having avg(sal) > 2000 ;
找出平均工资低于2000的部门
总结:
- 分组函数只能出现在选择列表中,或者是having ,order by 中。不能当做where后面的条件语句中。
- 只有先有group by 才有having 再有 order by 。
- 选择列中一定有一个字段是根据group by 操作用的。