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