Oracle中having

要使用统计函数必须使用分组不然会报错

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) ;
 

猜你喜欢

转载自blog.csdn.net/xutao_ccu/article/details/84970962