如何将长度为 4 的系列添加到这样的表中:
源表:
id
1
2
3
4
5
6
7
8
结果表:
id series
1 1
2 2
3 3
4 4
5 1
6 2
7 3
8 4
我正在使用 PostgreSQL 9.1。
如何将长度为 4 的系列添加到这样的表中:
源表:
id
1
2
3
4
5
6
7
8
结果表:
id series
1 1
2 2
3 3
4 4
5 1
6 2
7 3
8 4
我正在使用 PostgreSQL 9.1。
如果您的 ID 确实是连续且无间隙的,则可以使用id % 4 + 1
. 但我想实际上你的 ID 并不是那么有序,如果它们是从 a 生成的,SEQUENCE
你不应该依赖它们是无间隙的。
您可以使用 正确执行此操作row_number()
,如下所示:http: //sqlfiddle.com/#! 12/22767/5
SELECT
id,
(row_number() OVER (ORDER BY id) - 1) % 4 + 1
FROM Table1
ORDER BY 1;
也可以generate_series
在列表中作为 set-returning-function 使用SELECT
,但这是 PostgreSQL 扩展,而上面是标准 SQL,可以在除不支持窗口函数的 MySQL 之外的任何现代数据库中工作。
如果您想实际向表中添加一列,它会变得更加复杂。我不太确定您为什么要这样做,但可以使用UPDATE ... FROM
:
BEGIN;
ALTER TABLE table1 ADD COLUMN col2 INTEGER;
WITH gen_num(id,n) AS (
SELECT
id,
(row_number() OVER (ORDER BY id) - 1) % 4 + 1
FROM Table1
ORDER BY 1)
UPDATE table1 SET col2 = n
FROM gen_num
WHERE gen_num.id = table1.id;
COMMIT;