You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中重复生成n次row_number()序号?

在PostgreSQL中实现行号分组重复(每n行复用一个递增整数)

我们已经可以通过row_number()生成连续递增的行号,现在需要实现每n行(示例中n=5)重复一个递增的分组编号,即前5行的rownum_repeat为1,后续行依次归为2、3...,最终得到如下格式的输出:

idtextrownumrownum_repeat
1"val1"11
2"val2"21
3"val3"31
4"val4"41
5"val5"51
6"val6"62
7"val7"72

解决方案

核心逻辑是对row_number()生成的行号进行分组计算,这里提供两种常用实现方式:

方式1:使用CEIL()函数(浮点数除法)

通过将行号转为浮点数后除以分组大小n,再用CEIL()向上取整,即可得到分组编号:

SELECT
    id,
    text,
    ROW_NUMBER() OVER () AS rownum,
    CEIL(ROW_NUMBER() OVER ()::FLOAT / 5) AS rownum_repeat
FROM
    public.examples;

方式2:整数运算(避免浮点数)

如果希望用纯整数运算实现,可以通过(行号 + n - 1) // n的公式自动完成向上取整,效果与方式1完全一致:

SELECT
    id,
    text,
    ROW_NUMBER() OVER () AS rownum,
    (ROW_NUMBER() OVER () + 5 - 1) // 5 AS rownum_repeat
FROM
    public.examples;

两种方法都能精准实现需求,可根据个人习惯选择。

内容的提问来源于stack exchange,提问作者iskandarblue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:10:59