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:伪列,仅用于限制返回行数,无法指定排序规则。 ‌

相关推荐
Kiling_07045 小时前
面向对象和集合编程题 ( 二 )
java·开发语言·数据结构·算法
菜鸡儿齐5 小时前
Future接口学习
java·服务器·开发语言
2301_803538956 小时前
数据分析中count函数怎么用更高效
数据库·oracle
过期动态6 小时前
【LeetCode 热题 100】两数之和— 暴力法与哈希表法详解
java·数据结构·算法·leetcode·散列表
Refrain_zc6 小时前
Android开发在线音频播放器之章节三核心PlayerService
java
YL200404266 小时前
【Redis基础篇】Redis常见命令
数据库·redis·缓存
ZengLiangYi6 小时前
ChatCrystal大量对话导入时的内存优化
sql·ai编程
日月云棠6 小时前
17 Dubbo 2.7 集群容错策略源码解析
java·后端
Refrain_zc6 小时前
Android开发纯按键文件浏览器
java