在PostgreSQL中,是否可以生成一系列重复数字?例如,我想生成数字1到10,每个数字重复3次:
1
1
1
2
2
2
3
3
3
.. and so on.
答案 0 :(得分:29)
您可以将其加入一系列3:
SELECT a.n
from generate_series(1, 100) as a(n), generate_series(1, 3)
答案 1 :(得分:13)
您可以像这样尝试整数除法:
SELECT generate_series(3, 100) / 3
答案 2 :(得分:7)
对于这样的小数字CROSS JOIN
两个VALUES
表达式:
SELECT n
FROM (VALUES (1),(2),(3)) x(r) -- repetitions (values are not used)
,(VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10)) y(n); -- numbers
这适用于任何数字序列(包括重复或不规则的模式)
对于任何更大的东西,使用常规顺序模式,建议使用generate_series()
。
答案 3 :(得分:3)
SELECT * FROM (SELECT generate_series(1, 10)) A
JOIN (
SELECT generate_series(1, 3)
) B ON (TRUE)
答案 4 :(得分:2)
我不知道你是否可以在PostgreSQL中使用类似的generate_series,但我会尝试交叉连接:
SELECT x FROM
(SELECT generate_series(1, 10) AS x) t1,
(SELECT generate_series(1, 3) as y) t2
修改强>
由于generate_series已经返回一个表,因此在派生表中不需要SELECT:
SELECT x FROM
generate_series(1, 10) AS x,
generate_series(1, 3) as y
答案 5 :(得分:2)
只是另一种选择:
select generate_series(1, 3) from generate_series(1, 10)
select generate_series(1, 30) % 10 + 1
答案 6 :(得分:1)
SELECT a.x from generate_series(0, 100) as a(x), generate_series(1, 3)
答案 7 :(得分:0)
在我的情况下,我正在寻找一个表,其中包含一个包含以下数据的列,以便与具有类似列的其他表进行内部连接。
with
hours(hour) AS (
select concat(extract(hour from n), ' of ', n::date) as hour
from
generate_series(timestamp '2004-03-07', '2004-08-16', '1 hour')
as a(n)
)
select * from hours
链接到小提琴 https://www.db-fiddle.com/f/7VagpVQwio9e6DVjSwMsTL/1
我希望这会有所帮助。