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

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值