窗口函数row_number() OVER()对每个组内的行按照特定条件进行编号
Oracle或PostgreSQL中, row_number() OVER()是一个窗口函数,用于为查询结果集中的每一行分配一个唯一的行号,这是基于该行在排序后的结果集中所处的位置。这个函数特别适用于分组聚合数据时,需要对每个组内的行按照特定条件进行编号。
语法:
ROW_NUMBER() OVER (
[PARTITION BY column1, column2 ...]
ORDER BY sort_column1 [ASC|DESC], sort_column2 [ASC|DESC] ...
)
PARTITION BY子句可选,用于将数据分为多个分区(每个分区内部独立计数),常用于按分组计算行号。
ORDER BY指定了排序依据,确定行号的顺序。
例如:
select user_id, user_name, dept_id FROM t_user t
where t.dept_id in('1910','1734','2891') ORDER BY dept_id;
SELECT user_id, user_name, dept_id,
ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY user_id DESC) as rank
FROM t_user t
where t.dept_id in('1910','1734','2891');