【问题标题】:Create a column of increasing number in Postgresql在 Postgresql 中创建一个数量递增的列
【发布时间】:2021-10-15 09:16:02
【问题描述】:

我想通过 Postgresql(Redshift) 创建一个仅包含单列的 CTE - 将数字增加 1,例如 1,2,3,4,..直到 1000。

【问题讨论】:

    标签: postgresql amazon-web-services amazon-redshift auto-increment


    【解决方案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 标签
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2018-12-31
    • 2019-04-14
    • 2022-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-09-07
    • 2015-02-26
    相关资源
    最近更新 更多