代码之家  ›  专栏  ›  技术社区  ›  Michel

在PostGres中使用VIEW

  •  0
  • Michel  · 技术社区  · 2 年前

    我需要为PostGres数据库编写一个SQL查询。目标是基于表的内容创建视图。

    这是我的起始表:

    Rank  Value
     1      4
     2      5
     3      8
     4      11
     5      19
     6      32
     7      55
    

    这是我想要构建的视图:

    Rank  Value  SumUpTo
     1      4       4
     2      5       9
     3      8       17
     4      11      28
     5      19      47
     6      32      79
     7      55      134
    

    列Rank和Value只是从原始表中复制的。 SumUpTo列是通过将原始表中从秩1到当前秩的所有值相加来计算的。

    我尝试过这些查询,但都失败了:

    CREATE VIEW myview AS SELECT rank,value,(SELECT SUM(value) FROM mytable WHERE (rank<rank)) as SumUpTo FROM mytable;
    CREATE VIEW myview AS SELECT rank,value,(SELECT SUM(value) FROM mytable WHERE (rank<mytable.rank)) as SumUpTo FROM mytable;
    

    编写查询以获得我想要的结果的正确方法是什么?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Littlefoot    2 年前

    使用 sum 分析函数:

    SQL> select rank, value,
      2    sum(value) over (order by rank) sumUpTo
      3  from test
      4  order by rank;
    
          RANK      VALUE    SUMUPTO
    ---------- ---------- ----------
             1          4          4
             2          5          9
             3          8         17
    
    SQL>
    

    添加 create view 你自己请参阅 fiddle ,如果你愿意的话。