在 Postgresql 中创建一个数量递增的列
Posted
技术标签:
【中文标题】在 Postgresql 中创建一个数量递增的列【英文标题】:Create a column of increasing number in Postgresql 【发布时间】:2021-10-15 09:16:02 【问题描述】:我想通过 Postgresql(Redshift) 创建一个仅包含单列的 CTE - 将数字增加 1,例如 1,2,3,4,..直到 1000。
【问题讨论】:
【参考方案1】:是的,CTE 可以做到这一点:
with recursive numbers (nr) as (
values (1)
union all
select p.nr + 1
from numbers p
where p.nr < 1000
)
select *
from numbers;
Online example
【讨论】:
我没有仔细研究过这个 - 正要出去 - 我认为这会自称 1000 次是对的吗?【参考方案2】:这里是 1024。如果您只想要 1000,请添加“TOP 1000”。
SELECT
1 + p0.n
+ p1.n*2
+ p2.n * POWER(2,2)
+ p3.n * POWER(2,3)
+ p4.n * POWER(2,4)
+ p5.n * POWER(2,5)
+ p6.n * POWER(2,6)
+ p7.n * POWER(2,7)
+ p8.n * POWER(2,8)
+ p9.n * POWER(2,9)
as number
FROM
(SELECT 0 as n UNION SELECT 1) p0,
(SELECT 0 as n UNION SELECT 1) p1,
(SELECT 0 as n UNION SELECT 1) p2,
(SELECT 0 as n UNION SELECT 1) p3,
(SELECT 0 as n UNION SELECT 1) p4,
(SELECT 0 as n UNION SELECT 1) p5,
(SELECT 0 as n UNION SELECT 1) p6,
(SELECT 0 as n UNION SELECT 1) p7,
(SELECT 0 as n UNION SELECT 1) p8,
(SELECT 0 as n UNION SELECT 1) p9
Order by 1
【讨论】:
哦,这很整洁。自联接,每次将行数加倍。我用它来填充测试表,我从来没有想过将它用作系列生成器。不过,必须有一种方法可以使用更简单、更清晰的 SQL 来做到这一点。 (太好了——还有一件事要弄清楚:-) @MaxGanzII:递归 CTE 可以实现相同的 dbfiddle.uk/… 是的。它们很新,但我还没有使用它们。那么问题是哪种解决方案性能最高,最方便,然后总体上是最佳选择。这也是最不可能使集群崩溃的方法 - Redshift 过去曾遇到过递归问题。 顺便说一句,马,我经常看到你的名字在编辑 Redshift 问题。只是好奇,您与 Redshift 的历史/联系是什么? @MaxGanzII:根本没有,我只是删除了 Redshift 问题的 Postgres 标签以上是关于在 Postgresql 中创建一个数量递增的列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PostgreSQL 在 DBeaver 中创建自动递增/SERIAL id 列?
Hibernate LocalDateTime:Postgresql 模式生成在外部 Tomcat 中创建类型为“bytea”的列