关于数据库排名函数的使用
2012-09-12 17:45
239 查看
1、Oracle
(1)、row_number
该函数的功能是为查询出来的每一行记录生成一个序号。(如果有相同的也会分出个先后排名)
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里按人员的薪水排序
(2)、rank
rank函数考虑到了over子句中排序字段值相同的情况,也就是说如果有两个第一名,那么后面就直接第三名了:
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里按人员的薪水排序(这里RESEARCH部门就出现该情况了)
(3)、dense_rank
dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。(也就是说,如果有两个第一名,下一个还是第二名)
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里按人员的薪水排序(这里RESEARCH部门就出现该情况了)
(4)、ntile
ntile函数可以对序号进行分组处理。这就相当于将查询出来的记录集放到指定长度的数组中,每一个数组元素存放一定数量的记录。
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里对数据分为2组
--------------------------------------------------------------------------------------------------------------------------------------
在Oracle中还有一个rownum的东东,也可以产生唯一的序号,常用来进行分页排序,这里不再详细说明
(1)、row_number
该函数的功能是为查询出来的每一行记录生成一个序号。(如果有相同的也会分出个先后排名)
select dept.dname,ename,sal, row_number() over( partition by emp.deptno order by sal) rankOrder from emp inner join dept on dept.deptno=emp.deptno where 1=1 order by emp.deptno; ACCOUNTING MILLER 1300 1 ACCOUNTING CLARK 2450 2 ACCOUNTING KING 5000 3 RESEARCH SMITH 1100 1 RESEARCH ADAMS 1100 2 RESEARCH JONES 2975 3 RESEARCH FORD 3000 4 RESEARCH SCOTT 3000 5 SALES JAMES 950 1 SALES MARTIN 1250 2 SALES WARD 1250 3 SALES TURNER 1500 4 SALES ALLEN 1600 5 SALES BLAKE 2850 6
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里按人员的薪水排序
(2)、rank
rank函数考虑到了over子句中排序字段值相同的情况,也就是说如果有两个第一名,那么后面就直接第三名了:
select dept.dname,ename,sal, rank() over( partition by emp.deptno order by sal) rankOrder from emp inner join dept on dept.deptno=emp.deptno where 1=1 order by emp.deptno; ACCOUNTING MILLER 1300 1 ACCOUNTING CLARK 2450 2 ACCOUNTING KING 5000 3 RESEARCH SMITH 1100 1 RESEARCH ADAMS 1100 1 RESEARCH JONES 2975 3 RESEARCH FORD 3000 4 RESEARCH SCOTT 3000 4 SALES JAMES 950 1 SALES MARTIN 1250 2 SALES WARD 1250 2 SALES TURNER 1500 4 SALES ALLEN 1600 5 SALES BLAKE 2850 6
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里按人员的薪水排序(这里RESEARCH部门就出现该情况了)
(3)、dense_rank
dense_rank函数的功能与rank函数类似,只是在生成序号时是连续的,而rank函数生成的序号有可能不连续。(也就是说,如果有两个第一名,下一个还是第二名)
select dept.dname,ename,sal, dense_rank() over( partition by emp.deptno order by sal) rankOrder from emp inner join dept on dept.deptno=emp.deptno where 1=1 order by emp.deptno; ACCOUNTING MILLER 1300 1 ACCOUNTING CLARK 2450 2 ACCOUNTING KING 5000 3 RESEARCH SMITH 1100 1 RESEARCH ADAMS 1100 1 RESEARCH JONES 2975 2 RESEARCH FORD 3000 3 RESEARCH SCOTT 3000 3 SALES JAMES 950 1 SALES MARTIN 1250 2 SALES WARD 1250 2 SALES TURNER 1500 3 SALES ALLEN 1600 4 SALES BLAKE 2850 5
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里按人员的薪水排序(这里RESEARCH部门就出现该情况了)
(4)、ntile
ntile函数可以对序号进行分组处理。这就相当于将查询出来的记录集放到指定长度的数组中,每一个数组元素存放一定数量的记录。
select dept.dname,ename,sal, ntile(2) over( partition by emp.deptno order by sal) rankOrder from emp inner join dept on dept.deptno=emp.deptno where 1=1 order by emp.deptno; ACCOUNTING MILLER 1300 1 ACCOUNTING CLARK 2450 1 ACCOUNTING KING 5000 2 RESEARCH SMITH 1100 1 RESEARCH ADAMS 1100 1 RESEARCH JONES 2975 1 RESEARCH FORD 3000 2 RESEARCH SCOTT 3000 2 SALES JAMES 950 1 SALES MARTIN 1250 1 SALES WARD 1250 1 SALES TURNER 1500 2 SALES ALLEN 1600 2 SALES BLAKE 2850 2
partition by进行分组,这里按部门编码进行分组,order by进行排序,这里对数据分为2组
--------------------------------------------------------------------------------------------------------------------------------------
在Oracle中还有一个rownum的东东,也可以产生唯一的序号,常用来进行分页排序,这里不再详细说明
注:sql server也可以用这些函数,且效果是一样,这里不在举例
相关文章推荐
- 关于数据库的一些函数的使用
- 关于DB-Engines发布了数据库系统使用排名榜单
- 关于C++中sort函数所使用的cmp函数中的&的疑惑
- (转)关于C++中函数指针的使用(包含对typedef用法的讨论)
- 关于PHP的相似度计算函数:levenshtein的使用介绍
- 关于C语言中getopt()函数的使用方法
- SQL Server 中的排名函数与使用场景
- 在数据库中使用表值函数分割字符串
- 关于rand()函数srand()函数的使用(转)
- oracle数据库--关于使用分组函数以及group by的注意点
- 【转】数据库基本知识:(七)函数和表达式的使用
- Thinkphp3.2 关于快捷函数 模板引擎换为smarty时 地址跳转函数U()的使用修改及说明
- 关于C++中函数指针的使用
- 关于 Delphi 中流的使用(9) 分割与合并文件的函数
- 关于C++中函数指针的使用
- 关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案
- Xcode 7 使用CoreData 关于数据库升级问题
- 关于函数strtok和strtok_r的使用要点和实现原理(一)
- 关于类成员函数在模板中的使用
- 关于Update在不同数据库的使用