1.rank函数
rank计算一组值的排名,返回数字类型。排名可能是不连续。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 13 4 5。
- 作为一个聚合函数,返回虚拟行在样表中的排名。
- 作为一个解析函数,返回每一个的排名。
1.1聚合函数语法
1.2解析函数语法
1.3聚合函数的例子
计算假定薪水为2000的员工在样表中的排名。
SQL> select rank(2000) within group(order by e.sal desc) "Rank" 2 from emp e; Rank ---------- 7
假定薪水为2000的员工,按照薪水从高到低在样表中排第7名。
1.4解析函数的例子
按照薪水从高到低进行排名:
SQL> select e.ename,e.sal,rank() over(order by e.sal desc) "Rank" from emp e; ENAME SAL Rank ---------- --------- ---------- KING 5000.00 1 FORD 3000.00 2 SCOTT 3000.00 2 JONES 2975.00 4 BLAKE 2850.00 5 CLARK 2450.00 6 ALLEN 1600.00 7 TURNER 1500.00 8 MILLER 1300.00 9 WARD 1250.00 10 MARTIN 1250.00 10 ADAMS 1100.00 12 JAMES 950.00 13 SMITH 800.00 14
薪水为3000重复,并列排名第2,跳过第3.
在部内进行薪水从高到低的排名:
SQL> select e.ename, 2 e.sal, 3 e.deptno, 4 rank() over(partition by e.deptno order by e.sal desc) "Rank" 5 from emp e; ENAME SAL DEPTNO Rank ---------- --------- ------ ---------- KING 5000.00 10 1 CLARK 2450.00 10 2 MILLER 1300.00 10 3 SCOTT 3000.00 20 1 FORD 3000.00 20 1 JONES 2975.00 20 3 ADAMS 1100.00 20 4 SMITH 800.00 20 5 BLAKE 2850.00 30 1 ALLEN 1600.00 30 2 TURNER 1500.00 30 3 MARTIN 1250.00 30 4 WARD 1250.00 30 4 JAMES 950.00 30 6
2.dense_rank函数
dense_rank计算一组值的排名,该排名是连续整数从1开始。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 123 4。
- 作为一个聚合函数,返回虚拟行在样表中的排名。
- 作为一个解析函数,返回每一个的排名。
2.1聚合函数语法
2.2解析函数语法
2.3聚合函数的例子
计算假定薪水为2000的员工在样表中的排名。
SQL> select dense_rank(2000) within group(order by e.sal desc) "Rank" 2 from emp e; Rank ---------- 6
假定薪水为2000的员工,按照薪水从高到低在样表中排第7名。
2.4解析函数的例子
按照薪水从高到低进行排名:
SQL> select e.ename, 3 dense_rank() over(order by e.sal desc) "Rank" 4 from emp e; ENAME SAL Rank ---------- --------- ---------- KING 5000.00 1 FORD 3000.00 2 SCOTT 3000.00 2 JONES 2975.00 3 BLAKE 2850.00 4 CLARK 2450.00 5 ALLEN 1600.00 6 TURNER 1500.00 7 MILLER 1300.00 8 WARD 1250.00 9 MARTIN 1250.00 9 ADAMS 1100.00 10 JAMES 950.00 11 SMITH 800.00 12
有两个1250并列排名第8,接着1100是第9。排名是连续是连续的。
在部内进行薪水从高到低的排名:
SQL> select e.ename, 4 dense_rank() over(partition by e.deptno order by e.sal desc) "Rank" 5 from emp e; ENAME SAL DEPTNO Rank ---------- --------- ------ ---------- KING 5000.00 10 1 CLARK 2450.00 10 2 MILLER 1300.00 10 3 SCOTT 3000.00 20 1 FORD 3000.00 20 1 JONES 2975.00 20 2 ADAMS 1100.00 20 3 SMITH 800.00 20 4 BLAKE 2850.00 30 1 ALLEN 1600.00 30 2 TURNER 1500.00 30 3 MARTIN 1250.00 30 4 WARD 1250.00 30 4 JAMES 950.00 30 5
20部门有两个3000并列排名第一,接着2975是第二。排名是连续是连续的。
一个和最后一个相关的例子
DENSE_RANK()over( partition BY TO_CHAR(ds.stat_date,'YYYY-MM') order by SUM(ds.ORDER_AMOUNT) DESC) paiming, (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|