在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
排列(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函数的基本使用方法,希望对大家有所帮助。 |
请发表评论