分组排序SQL语句——row_number() over (partition by 分组 order by 排序)
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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了