Postgresql 来自别名的SQL累积和

Postgresql 来自别名的SQL累积和,postgresql,alias,cumulative-sum,Postgresql,Alias,Cumulative Sum,我想根据我在同一查询中生成的百分比进行累计和。我知道做累积的方法: select sum(grandtotal)over(order by agentname) as cumulative from data 但现在我想做累积的列还没有在数据库中。在同一查询中生成(别名:百分比) 我试着: (select sum(percentage)over(order by agentname) as cumulative from data 错误是“百分比”列不存在。如何应用累计金额?多谢各位 这是我

我想根据我在同一查询中生成的百分比进行累计和。我知道做累积的方法:

select sum(grandtotal)over(order by agentname) as cumulative from data
但现在我想做累积的列还没有在数据库中。在同一查询中生成(别名:百分比)

我试着:

(select sum(percentage)over(order by agentname) as cumulative from data
错误是“百分比”列不存在。如何应用累计金额?多谢各位

这是我想要的输出的表:

    agentname | weakness | frequency | percentage | cumulative
       A      |   W1     |     4     |    36.36   |    36.36
       A      |   W2     |     4     |    36.36   |    72.72
       A      |   W3     |     2     |    18.18   |    90.09
       A      |   W4     |     1     |     9.09   |     100

无法根据同一
选择中的另一个窗口函数的结果计算窗口函数(在大多数数据库中)

您必须再次嵌套该查询:

SELECT t.*, SUM(percentage) OVER (ORDER BY agentname) AS cumulative
FROM (
  SELECT 
    agentname,
    weakness,
    COUNT(*) AS frequency,

    -- No ORDER BY in this SUM()!
    COUNT(*) * 100.00 / SUM(COUNT(*)) OVER () AS percentage
  FROM ... WHERE ...
) AS t
ORDER BY agentname
进一步反馈: 当你这样做的时候,我建议通过在
子句中添加另一列来确定
ORDER BY
子句,例如
弱点


另外,我不确定您的需求,但我认为这些百分比需要根据
agentname
计算?在这种情况下,您必须在(…)
窗口函数的
SUM(COUNT(*)OVER(…)
中添加一个
PARTITION BY agentname
子句。

您能向我们展示输入和输出数据的示例吗?如果您不能理解查询的这部分
SUM(COUNT(*)OVER(order BY agentname)
是如何正确执行的。@tim表够了吗?@giorgios。不,不是。我将提供图像n完整的代码,您仍然没有向我们显示预期的输出。您不想让人们在这里猜测。代码不会导致语法错误。但累积的结果是错误的。虽然最终的总和是正确的,但它显示相同频率的相同数字。我想弄明白,但我还是明白了。我在另一个帖子中解决了这个问题。非常感谢。嵌套的建议可以help@Elbert:谢谢你的链接。在另一个问题上,我自己也学到了一些东西。与其依赖于
范围
,我肯定会确保您的
ORDER BY
子句是确定性的。在SQL中,这始终是一个好主意。
SELECT t.*, SUM(percentage) OVER (ORDER BY agentname) AS cumulative
FROM (
  SELECT 
    agentname,
    weakness,
    COUNT(*) AS frequency,

    -- No ORDER BY in this SUM()!
    COUNT(*) * 100.00 / SUM(COUNT(*)) OVER () AS percentage
  FROM ... WHERE ...
) AS t
ORDER BY agentname