如何添加在長度爲4一系列的表是這樣的:如何使用重複1,2,3,4,1,2,3,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一系列的表是這樣的:如何使用重複1,2,3,4,1,2,3,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
。但我認爲,實際上你的身份證並不那麼有序,如果他們是從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
作爲SELECT
列表中設置返回功能做的,但是這是一個PostgreSQL的擴展,wheras以上是標準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;
+1包含的樣本數據,預期成果和PostgreSQL版本。這是一個奇怪的問題,我無法想象爲什麼你想要,但嘿... –