如何让ROW_NUMBER()函数每计数X行后重置为1?
实现ROW_NUMBER()每N行重置计数的方法
当然可以实现!这是SQL里非常实用的一个需求,用窗口函数搭配简单的算术运算就能轻松搞定。
针对你想要每3行重置一次行号的场景,核心思路是先生成连续的行号,再通过取模运算让数值循环起来:
SELECT YEAR, -- 核心计算逻辑:行号减1取模3,再加1实现1-3循环 (ROW_NUMBER() OVER (ORDER BY YEAR) - 1) % 3 + 1 AS RowNumber FROM your_table;
逻辑拆解:
ROW_NUMBER() OVER (ORDER BY YEAR):先按YEAR字段排序,生成从1开始的连续行号(1、2、3、4、5...)- 减1之后,行号变成0、1、2、3、4...
% 3取模运算:让结果在0、1、2之间循环(0%3=0,1%3=1,2%3=2,3%3=0,以此类推)- 最后加1,就把循环的数值转换成你需要的1、2、3、1、2、3...序列
如果你的数据库不支持%运算符(比如部分老版本数据库),可以用MOD函数替代,写法如下:
SELECT YEAR, MOD(ROW_NUMBER() OVER (ORDER BY YEAR) - 1, 3) + 1 AS RowNumber FROM your_table;
把上述SQL里的3换成任意你需要的行数X,就能实现每X行重置一次行号的效果,完全适配你的需求。
内容的提问来源于stack exchange,提问作者jdids
相关产品推荐
相关产品推荐

