以前在使用oracle数据库的时候,单纯的order by 字段 ASC (DESC)对数据集进行排序时,没有办法直接获得排名,必须遍历结果集的时候,自定义排序编号,最近看到一个好办法,在此分享下。。
主要介绍3种不同的排序方法并完成排名
一、使用Rank关键字
Rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名
二、使用Dense_Rank关键字
Dense_rank函数返回一个唯一的值,除非当碰到相同数据时,此时所有相同数据的排名都是一样的。
三、使用Row_Number关键字
Row_number函数返回一个唯一的值,当碰到相同数据时,排名按照记录集中记录的顺序依次递增。
下面看下示例:
创建员工表:
Create Table EmployeeInfo (
CODE Number(3) Not Null,
EmployeeName varchar2(15),
DepartmentID Number(3),
Salary NUMBER(7,2),
Constraint PK_EmployeeInfo Primary Key (CODE)
);
同时使用Rank ,Dense_Rank ,Row_Number 关键字查询
Select EMPLOYEENAME,SALARY,
RANK() OVER (Order By SALARY Desc) "RANK",
DENSE_RANK() OVER (Order By SALARY Desc ) "DENSE_RANK",
ROW_NUMBER() OVER(Order By SALARY Desc) "ROW_NUMBER"
From EMPLOYEEINFO
的查询的节结果为:
可以看出,都是按照Over()中的指定的字段进行排序,排序的结果大家看就明白啦
当然如果,我们还希望对数据进行分组的话,只需在over从句中加入Partition by groupField
如:
Select DEPARTMENTID,EMPLOYEENAME,SALARY,
RANK() OVER ( Partition By DEPARTMENTID Order By SALARY Desc) "RANK",
DENSE_RANK() OVER ( Partition By DEPARTMENTID Order By SALARY Desc ) "DENSE_RANK",
ROW_NUMBER() OVER( Partition By DEPARTMENTID Order By SALARY Desc) "ROW_NUMBER"
From EMPLOYEEINFO
结果为 :
其次如果插入一条排序的字段为空的字段默认显示是在第一行,我们可以通过指定 Nulls Last而将排序字段为空的记录显示在最后:
查询语句为:
Select EMPLOYEENAME,SALARY,
RANK() OVER (Order By SALARY Desc Nulls Last) "RANK",
DENSE_RANK() OVER (Order By SALARY Desc Nulls Last) "DENSE_RANK",
ROW_NUMBER() OVER(Order By SALARY Desc Nulls Last ) "ROW_NUMBER"
From EMPLOYEEINFO
结果为:
- 大小: 75.9 KB
- 大小: 64.9 KB
- 大小: 80.6 KB
分享到:
相关推荐
Oracle分析函数Rank、Dense_rank和row_number是用于处理数据集的高级工具,它们在数据库查询中发挥着关键作用,特别是在需要对数据进行排序和分组时。这三种函数都有各自的特点,适用于不同的业务场景。 1. **row_...
在Oracle数据库中,`ROW_NUMBER()`函数是一种窗口函数,主要用于为查询结果中的每一行分配一个唯一的序列号。这一特性使得它在处理分组数据时非常有用,尤其是在需要对数据进行排序并按特定顺序标记每行的情况下。 ...
RANK、DENSE_RANK和ROW_NUMBER提供行号,GROUP BY用于对数据进行分组,ORDER BY则对结果进行排序。 这些只是Oracle函数中的一部分,实际的Oracle函数大全包含的远不止这些。通过这份"oracle函数大全(分类显示).chm...
分析函数2(Rank, Dense_rank, row_number);分析函数3(Top/Bottom N、First/Last、NTile);窗口函数;报表函数;分析函数总结;26个分析函数;PLSQL开发笔记和小结;分析函数简述 ROW_NUMBER () OVER([partition_clause]...
在Oracle数据库中,`RANK()`函数是一种窗口函数,它被用于在一组数据中为每一行分配一个唯一的排名。此函数特别适用于需要基于特定条件对数据进行排序并为每个记录分配一个名次的情况。在本篇文章中,我们将深入探讨...
在oracle中,有rank,dense_rank,row_number,以及分组排名partition。 说明: rank:排名会出现并列第n名,它之后的会跳过空出的名次,例如:1,2,2,4 dense_rank:排名会出现并列第n名,它之后的名次为n+1,例如:1,2,...
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
在上述信息中,提到了几个关键的分析函数:RANK()、ROW_NUMBER()和LAG(),下面将详细阐述这些函数的使用方法和特点。 1. **ROW_NUMBER()** ROW_NUMBER()函数用于为每个分组内的行分配一个唯一的序列号,这个编号是...
其中`GROUP BY`、`ORDER BY`、`OVER`子句以及`ROW_NUMBER()`、`RANK()`、`DENSE_RANK()`等分析函数都是非常有用的工具。在实际应用中,根据具体的需求选择合适的工具和技术组合可以大大提高数据处理的效率和灵活性。...
2. **DENSE_RANK()**:与RANK()不同,DENSE_RANK()在遇到排名相等的情况时不会在名次中留下空位,这意味着即使有多个数据点并列,下一项仍将紧接在并列名次之后。 3. **CUME_DIST()**:这个函数返回特定值相对于一...
5. **高级查询**:包括使用集合操作(UNION、INTERSECT、EXCEPT)和窗口函数(ROW_NUMBER、RANK、DENSE_RANK等),这些功能使查询更复杂和灵活。 6. **数据字典**:Oracle的数据字典是系统维护的一系列表和视图,...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,尤其在企业级应用中占据了重要的地位。本文将深入探讨Oracle 10g中的高级特性,包括正则表达式和SQL优化,帮助你提升数据库管理与开发技能。 一、...
Oracle中的ROWNUM是一个重要的查询关键字,它用于限制查询返回...对于需要筛选特定范围的数据,可以考虑使用其他方法,如子查询或分析函数(如RANK()、DENSE_RANK()或ROW_NUMBER()),它们提供了更灵活的行数控制方式。
本篇主要探讨了`row_number()`、`rank()`和`dense_rank()`这三个窗口函数,它们都属于统计函数的一种,尤其在处理分组数据时,能提供强大的排序和排名功能。 首先,`row_number()`函数是用来为每一行分配一个唯一的...
本次介绍的是几个常用的Oracle统计函数:row_number()、rank()和dense_rank()。 首先,row_number()函数会为查询结果集中的每一行分配一个唯一的连续整数序列号。这个数字是根据ORDER BY子句中定义的顺序进行排序的...
其中,`RANK()`、`DENSE_RANK()`和`ROW_NUMBER()`函数是经常被提及的三个分析函数,它们都能用于为数据行分配顺序编号,但处理并列情况时有不同的行为: 1. `RANK()`: 当有并列情况(即多个行具有相同的值)时,`...
1、oracle分析函数 中文: 主要含: rank() 和 dense_rank() first_value()和last_value() row_number() LAG() range开窗函数 2、oracle分析函数 英文: 比较详细