Oracle中ROW_NUMBER() OVER()

Oracle中ROW_NUMBER() OVER()是窗口函数,用于为查询结果集中的每一行分配唯一序号,支持分组排序和全局排序。

1、基本语法

ROW_NUMBER() OVER([PARTITION BY 分组列] ORDER BY 排序列 [ASC|DESC])

PARTITION BY:按指定列分组,未指定则对整个结果集排序。

ORDER BY:定义排序规则(升序或降序)。

2、典型应用场景

‌(1)分页查询‌

获取薪资排名第四到第六的员工:

SELECT * FROM (

SELECT employee_id, salary,

ROW_NUMBER() OVER(ORDER BY salary DESC) AS rn

FROM employees

) WHERE rn BETWEEN 4 AND 6;

‌(2)数据去重‌

获取每个部门薪资最高的员工:

SELECT * FROM (

SELECT department_id, employee_name, salary,

ROW_NUMBER() OVER(PARTITION BY department_id

ORDER BY salary DESC) AS rn

FROM employees

) WHERE rn = 1;

(3) ‌分组排名‌

统计每个部门员工薪资排名:

SELECT department_id, employee_name, salary,

ROW_NUMBER() OVER(PARTITION BY department_id

ORDER BY salary DESC) AS rank

FROM employees;

3、与ROWNUM的区别

ROW_NUMBER():支持分组排序,为每行分配唯一序号。

ROWNUM:伪列,仅用于限制返回行数,无法指定排序规则。 ‌

相关推荐
he___H17 小时前
Redis高级特性
数据库·redis·缓存
crossaspeed17 小时前
Redis的持久化(八股)
数据库·redis·缓存
焦糖玛奇朵婷17 小时前
盲盒小程序开发科普:核心玩法与功能解析
大数据·数据库·程序人生·小程序·软件需求
市场部需要一个软件开发岗位17 小时前
数据仓库相关内容分享
数据库·数据仓库·oracle
zhougl99617 小时前
Java 枚举类(enum)详解
java·开发语言·python
AlenTech17 小时前
SQL 中的 WITH ... AS ...
数据库·sql
想七想八不如1140818 小时前
2019机试真题
java·华为od·华为
恋爱绝缘体118 小时前
Java语言提供了八种基本类型。六种数字类型【函数基数噶】
java·python·算法
l1t18 小时前
利用多种方法实现SQL行列转换
数据库·sql·postgresql·kingbase·duckdb
·云扬·18 小时前
MySQL Binlog三种记录格式详解
android·数据库·mysql