Oracle rank和dense_rank排名函数
2013-12-11 10:54
441 查看
1.rank函数
rank计算一组值的排名,返回数字类型。排名可能是不连续。如果有5人,其中有2个人排名第一,则rank返回的排名结果为:1 1 3 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 1 2 3 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,
2 e.sal,
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,
2 e.sal,
3 e.deptno,
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是第二。排名是连续是连续的。
相关文章推荐
- oracle分析函数系列之rank,dense_rank,row_number:实现排名策略 .
- Oracle rank和dense_rank排名函数
- Oracle 数据库数据排名函数:rank() 和dense_rank() 。
- Oracle问题——排名函数(rank与dense_rank)
- 排名函数(ROW_NUMBER、RANK、DENSE_RANK)及OVER子句 Oracle 中分析函数用法之--rank(),dense_rank(),partition,over()
- oracle分析函数系列之rank,dense_rank,row_number:实现排名策略
- oracle分析函数系列之rank,dense_rank,row_number:实现排名策略
- Oracle分析函数四——函数RANK,DENSE_RANK,FIRST,LAST…
- oracle分析函数Rank, Dense_rank, row_number
- Oracle分析函数之Rank()和DENSE_RANK()详解
- SQLServer针对排名函数ROWNUMBER()、RANK()、DENSE_RANK()、NTILE的研究!~
- SQL2005 四个排名函数(row_number、rank、dense_rank和ntile)的比较
- Oracle排名函数(Rank)实例详解
- oracle 分析函数Rank, Dense_rank, row_number
- SQL Server2005杂谈(3):四个排名函数(row_number、rank、dense_rank和ntile)的比较
- Sql Server2005对t-sql的增强之排名函数ROW_NUMBER, RANK, DENSE_RANK, NTILE
- Sql 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)(转载)
- Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST…|转|
- Oracle排名函数(Rank)实例详解
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较