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