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

SQL中如何创建满4个值自动重置的循环计数列

SQL实现1-4循环列生成方案

核心实现逻辑

要基于从1开始连续递增的整数列,生成按1、2、3、4循环排列的第二列,核心是利用整数取模运算处理循环边界,最简洁的通用计算公式为:
(递增列值 - 1) % 4 + 1

逻辑说明:将递增列值先减1,对4取模后会得到0、1、2、3的循环序列,再加1就能转换为1、2、3、4的目标循环序列,避免了直接取模时4的倍数返回0的问题。

场景1:现有表已有连续递增列的查询实现

假设你的表名为target_table,已有的从1开始递增的列名为id,直接执行如下查询即可得到预期结果:

SELECT
  id,
  (id - 1) % 4 + 1 AS cycle_value
FROM target_table
ORDER BY id;

场景2:无现成表,直接生成目标序列

如果需要直接生成符合规则的测试数据,可以用标准递归CTE写法(兼容MySQL 8.0+、PostgreSQL、SQL Server、Spark SQL等绝大多数支持SQL:1999标准的数据库),示例生成前15行数据:

WITH RECURSIVE sequence AS (
  -- 递归起点:第一行值为1
  SELECT 1 AS id
  UNION ALL
  -- 递归逐行+1,直到达到设定的最大值,此处示例最大值为15,可按需修改
  SELECT id + 1 FROM sequence WHERE id < 15
)
SELECT
  id,
  (id - 1) % 4 + 1 AS cycle_value
FROM sequence;

执行上述代码后返回的结果和需求给出的示例完全一致:

id | cycle_value
---|------------
1  | 1
2  | 2
3  | 3
4  | 4
5  | 1
6  | 2
7  | 3
8  | 4
9  | 1
10 | 2
11 | 3
12 | 4
13 | 1
14 | 2
15 | 3

可选替代写法

如果不习惯用(x-1)%4+1的偏移写法,也可以用CASE判断处理取模为0的场景,效果完全相同:

SELECT
  id,
  CASE WHEN id % 4 = 0 THEN 4 ELSE id % 4 END AS cycle_value
FROM target_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:42:26