我正在努力做到這一點,因此插入到我的表中的任何給定行都會在特定范圍內隨機排列數字,比如說 1-5 表示 5 列接收數字......但是如果一個數字已經被插入一列,只有剩余的數字可以用于其余的。
我需要做什么才能做到這一點?這是迄今為止我為填充 10 行所做的示例。(名稱列按原樣很好,但我想我會把它包括在內,以防萬一這個因素成為答案)。
INSERT INTO tablename
("name", "col1", "col2", "col3", "col4", "col5")
SELECT substr(md5(random()::text), 0, 15), (random() * 4 1), (random() * 4 1),
(random() * 4 1), (random() * 4 1), (random() * 4 1)
FROM generate_series(1, 10)
此查詢在其當前狀態下重復相同的行
如果列中的確切數字組合在未來的行中重復,這對我來說不是問題,所以 DISTINCT 不是我想要的。看起來我也不能使用 EXISTS/NOT EXISTS,因為該行還不存在。
也許在子查詢中不存在可能會起作用?但我還沒有想出一種方法來處理這些。
感謝這里的任何幫助,謝謝。
uj5u.com熱心網友回復:
因此,以下解決方案使用生成從 1 到 5 的數字generate_series,然后將它們打亂到一個陣列中。然后陣列用于填充表:
WITH generator AS (
SELECT array_agg(gen.i ORDER BY random()) AS numbers
FROM generate_series(1, 5) gen(i) -- range of numbers
CROSS
JOIN generate_series(1, 5) rows(i) -- number of rows
GROUP BY rows.i
)
INSERT INTO tablename
(name, col1, col2, col3, col4, col5)
SELECT substr(md5(random()::text), 0, 15) AS name
, gen.numbers[1]
, gen.numbers[2]
, gen.numbers[3]
, gen.numbers[4]
, gen.numbers[5]
FROM generator gen
這是關于 dbfiddle 的一個作業示例
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427600.html
標籤:sql PostgreSQL
上一篇:計算單條記錄的行數
下一篇:是否可以從字串映射jooq記錄
