【问题标题】:How to create a column that increments in steps of 4 in Postgresql如何在 Postgresql 中创建以 4 为步骤递增的列
【发布时间】:2020-09-07 13:34:42
【问题描述】:

我正在尝试向我的表中添加一列,该列以四步递增,如下所示:

    1
    1
    1
    1
    2
    2
    2
    2
    3
    3
    3
    3
etc.

我一直在阅读有关 CREATE SEQUENCE 的内容,但这似乎不是我所需要的。

有人对如何最好地做到这一点有任何建议吗?

【问题讨论】:

    标签: sql postgresql select sequence window-functions


    【解决方案1】:

    您可以使用row_number() 和整数除法:

    select
        t.*,
        (3 + row_number() over(order by id)) / 4 rn
    from mytable t
    

    这假设您有一个名为id 的排序列。我实际上不建议存储这些派生信息。您可以即时计算它,也可以放入视图中。

    【讨论】:

      【解决方案2】:

      您仍然可以使用常规序列作为默认值,但请执行以下操作:

      CREATE TABLE test (col1 int, col2 text);
      
      CREATE SEQUENCE test_col1_seq OWNED BY test.col1;
      
      ALTER TABLE test ALTER COLUMN col1 SET DEFAULT ceil(nextval('test_col1_seq')/4::numeric);
      
      SELECT * FROM test;
       col1 | col2 
      ------+------
          1 | a
          1 | b
          1 | c
          1 | d
          2 | e
          2 | f
          2 | g
          2 | h
          3 | i
      (9 rows)
      

      这只是将 is 除以 4,然后将值向下舍入。

      【讨论】:

        猜你喜欢
        • 2017-04-04
        • 2021-10-15
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        相关资源
        最近更新 更多