要使用统计函数必须使用分组不然会报错
select job,deptno from emp group by deptno,job ;
select 后面只能接 group by 后面有的列名 但不是必须接 但是不推荐 因为会使显示结果不明确
group by 后面接的列名 取数量最多的作为分组条件
select deptno,job,avg(sal),sum(sal),max(sal), count(empno) from emp group by job,deptno;
正常不加order by排序的话 group by 会根据分组列进行升序排序
select job,avg(sal),sum(sal),max(sal), count(empno) from emp group by job order by avg(sal) desc
having 和 where 相比
having后面可以加统计函数 where不行
如果加了group by函数 having将直接应用于group by创建的那些组 如果没有having 但是有where having会直接应用于where筛选之后的数据将其视为一组
如果既没有where也没有group by 那么having将直接接from输出 将其视为一组
where位于group by 分组操作之前 having用于 group by 操作之后
具体的顺序是先where 后 group by 最后在group by的分出来的组上进行having操作
在分组之后家rollup和cube对分组之后的结果进行小结
select job 岗位,deptno 部门标号, avg(sal) 平均工资 from emp group by cube(deptno,job) ;
select job 岗位,deptno 部门标号, avg(sal) 平均工资 from emp group by rollup(deptno,job) ;
rollup 对 select 所选择的统计函数进行小结
显示了所有员工的平均工资 最高工资 并对人数做了小结
cube进行了横向小结和纵向小结
显示了各部门各岗位的平均工资 各部门的平均工资 deptno 各岗位的平均工资 job 所以剖员工的平均工资 以及对应的最大最小值 并进行了计数
group 毕业操作只能以单一的列进行分组 使用grouping sets 能合并多个分组结果
select deptno ,job,avg(sal) from emp group by grouping sets ( deptno,job) ;