排列(rank())函数。这些排列函数提供了定义一个集合(使用 PARTITION 子句),然后根据某种排序方式对这个集合内的元素进行排列的能力,下面以scott用户的emp表为例来说明rank over partition如何使用。 1)查询员工薪水并连续求和 select deptno,ename,sal,
sum(sal)over(order by ename) sum1,
sum(sal)over() sum2,
100* round(sal/sum(sal)over(),4) 'bal%'
from emp
结果如下: DEPTNO ENAME SAL SUM1 SUM2 bal% DEPTNO ENAME SAL SUM1 SUM2 bal% 2)如下: select deptno,ename,sal, sum(sal)over(partition by deptno order by ename) sum1, sum(sal)over(partition by deptno) sum2, sum(sal)over(partition by deptno order by sal) sum3, 100* round(sal/sum(sal)over(),4) 'bal%' from emp 结果如下: DEPTNO ENAME SAL SUM1 SUM2 SUM3 bal% DEPTNO ENAME SAL SUM1 SUM2 SUM3 bal% 3)如下: select empno,deptno,sal,
sum(sal)over(partition by deptno) 'deptSum',
rank()over(partition by deptno order by sal desc nulls last) rank,
dense_rank()over(partition by deptno order by sal desc nulls last) d_rank,
row_number()over(partition by deptno order by sal desc nulls last) row_rank
from emp
注: rang()函数主要用于排序,并给出序号 dense_rank():功能同rank()一样,区别在于,rank()对于排序并的数据给予相同序号,接下来的数据序号直接跳中跃,dense_rank()则不是,比如数据:1,2,2,4,5,6.。。。。这是rank()的形式 1,2,2,3,4,5,。。。。这是dense_rank()的形式 1,2,3,4,5,6.。。。。。这是row_number()函数形式 row_number()函数则是按照顺序依次使用,相当于我们普通查询里的rownum值 其实从上面三个例子当中,不难看出over(partition by ... order by ...)的整体概念,我理解是 partition by:按照指字的字段分区,如果没有则针对全体数据 以上就是rank,over partition函数的基本使用方法,希望对大家有所帮助。 您可能感兴趣的文章:
|
|