如何使用 generate_series() 生成值网格
Posted
技术标签:
【中文标题】如何使用 generate_series() 生成值网格【英文标题】:How to use generate_series() to generate a grid of values 【发布时间】:2018-11-23 17:03:30 【问题描述】:我想生成一个由(行、列)对组成的网格,例如:
1 | 1
1 | 2
1 | 3
...
2 | 1
2 | 2
...
我的幼稚方法有这种令人费解的行为:
select generate_series(1,5), generate_series(1, 5);
generate_series | generate_series
-----------------+-----------------
1 | 1
2 | 2
3 | 3
4 | 4
5 | 5
(5 rows)
select generate_series(1,5), generate_series(1, 4);
generate_series | generate_series
-----------------+-----------------
1 | 1
2 | 2
3 | 3
4 | 4
5 | 1
1 | 2
2 | 3
3 | 4
4 | 1
5 | 2
1 | 3
2 | 4
3 | 1
4 | 2
5 | 3
1 | 4
2 | 1
3 | 2
4 | 3
5 | 4
(20 rows)
似乎重复每个系列,直到到达具有每个系列的最终值的行。
将此函数用作与自身交叉连接的正确方法是什么?
【问题讨论】:
【参考方案1】:将函数调用移至FROM
子句:
SELECT *
FROM generate_series(1,5) a
, generate_series(1,5) b;
或者升级到 Postgres 10 或更高版本,最终改变了这种奇怪的行为。详细解释:
What is the expected behaviour for multiple set-returning functions in SELECT clause?以逗号分隔的FROM
项目交叉连接。见:
【讨论】:
啊,非常感谢。没有意识到我在做一些奇怪的事情。以上是关于如何使用 generate_series() 生成值网格的主要内容,如果未能解决你的问题,请参考以下文章
使用 postgres generate_series 生成定期计划
PostgreSQL:如何使用 generate_series() 找出列中缺失的数字?
如何在 postgreSQL 中创建 generate_series 函数?
PostgreSQL的generate_series函数应用