row_number() over (partition by order by) 是SQL协议中的一种窗口函数,用于在每个分区内对每一行进行排序并编号,从1开始编号,赋予其连续的编号。
row_number() 函数搭配partition by与order by函数可以完成以下功能。
- 对查询结果集中的每一行分配一个唯一的数字,从1开始编号。
- 结合partition by可以先对结果进行分组,然后组内每条数据再从1开始编号。
示例语句:
SELECT *,ROW_NUMBER() OVER (PARTITION BY code, name ORDER BY id ) AS rn FROM table_name;
上面语句以表 table_name 中的code、name分组,相同的code和name进行排序,每组的顺序从1开始排列。
如果我们要删除重复的数据,那么可以这样:
WITH ranked_rows AS (SELECT *,ROW_NUMBER() OVER (PARTITION BY code, name ORDER BY id) AS rn FROM table_name) DELETE FROM table_name WHERE id IN (SELECT id FROM ranked_rows WHERE rn > 1);