PostgreSQL 13.0中的SUM generated_sequence

kkih6yb8  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(2)|浏览(124)

我有类似的东西,我需要得到“三角形”数-通过从0到n的所有自然数求和而创建。我有这样的代码,我应该写什么才能SUM(generate_series from generate_series(1,n))?

SELECT n,
    CASE 
      WHEN n > 0 THEN
        SUM value FROM generate_series(1,n)
      ELSE 0
    END
  AS res
FROM triangular

字符串
结果应该是这样的:(n-1,res-1/ n-2,res-3/ n-3,res-6)或者换句话说:for(res=0;n>0;n--){res=res+n;}我尝试生成_serise并对其求和。
我试图找到“adcvate”PostgreSQL文档wikilike看到返回表“属性”的generate_sequence“类”
现在,我得到了这个:

SELECT n,
    SUM(generate_s::INTEGER)
  AS res
FROM triangular,
  LATERAL generate_series(0,CASE WHEN n<=0 THEN 0 ELSE triangular.n END) 
    AS generate_ser(generate_s)
GROUP BY n


我如何替换GROUP BY,这样它就不会以任何方式分组它,只有n值进入处理代码的方式?

olhwl3o2

olhwl3o21#

您是否在搜索累积的SUM()window function
demo:db<>fiddle

SELECT
    x,
    SUM(x) OVER (ORDER BY x) 
FROM generate_series(1, 10) AS x  -- second parameter is n

字符串
还是一个简单的集合?
demo:db<>fiddle

SELECT
    SUM(x)
FROM generate_series(1, 10) AS x  -- second parameter is n

v8wbuo2f

v8wbuo2f2#

如果你不提供别名,名字就只是“generate_series”。我不知道在哪里有文档记录,但是通过使用*并查看标题,它是可以被替换的:

select * from generate_series(1,1);
 generate_series
-----------------
               1

字符串
或者,如果您指定了列别名,则该别名就是名称:

select * from generate_series(1,1) as foo(bar);
 bar
-----
   1


如果提供了表别名而没有提供列别名,则列名是表名的副本。

select * from generate_series(1,1) as foo;
 foo
-----
   1

相关问题