Oracle高级查询

1. row_number() over(order by 列名)

    select empno,ename , sal,row_number() over(order by ename) from emp;

   用法:查询emp表,然后对ename进行排序,row_number()的作用是,ename排序后的位置,从1开始.

   如果出现了两个这样的查询函数,则以后面的排序为主,

 

2.  针对聚合函数,原本聚合函数只能跟分组用在一起,但是可以利用Over来解决聚合函数与单行查询结果,尤其诶查询,select max(sal) over(),min(sal) over() from emp;

               select sum(sal) over(),avg(sal) over,ename,empno from emp;

结果集是,聚合函数产生的单值,覆盖了聚合函数那一列.


3.可以利用row_number() over(partition by 列名 order by 列名)  来对整个结果集按照某列进行划分及按照某列进行排序,   划分后的每一项都在一起.就组成了一组,它并不跟group by一样,它只是划分在一起,并不合并为一组,然后利用row_number()    或者 dense_rank(), 或者 rank()来对划分的这一组进行记录.从1开始.

row_number()不管有没有重复,对划分的同一组的数据进行从1开始的递增

dense_rank()如果划分为同一组,如果,同一组中的排序项有重复的,那么它的记录就会有重复,下一次增长却从增加1开始,

而rank()它跟它有点却别,它是在重复后,直接跳过重复的记录的个数,从第N个数开始;

 

 

4.查询上条记录和下条记录分别用lead(列名) over(order by 列名) 和 lag(列名) over(order by 列名)

  例如你要查询上个月的总工资,和下个月的总工资,可以利用这个来完成

  它是进行先排序,然后根据排序的结果,来进行上条记录,下条记录的查找

 

 

 

dsf

dfd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值