分组排序SQL语句——row_number() over (partition by 分组 order by 排序)

‌  row_number() over (partition by order by) 是SQL协议中的一种窗口函数,用于在每个分区内对每一行进行排序并编号,从1开始编号,赋予其连续的编号。

  row_number() 函数搭配partition by与order by函数可以完成以下功能。

  1. 对查询结果集中的每一行分配一个唯一的数字,从1开始编号。
  2. 结合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);

 

posted @ 2025-01-22 16:00  胜金  阅读(2391)  评论(0)    收藏  举报