我遇到的问题是Postgres,因为使用具有非唯一值的SUM或“sales”会导致非唯一累积金额或“正在运行的销售额”。
以下是查询:
SELECT *,
SUM(Sales) OVER (ORDER BY sales DESC) as running_sales
FROM t;
基本上我希望此表格为:
4--Motherboards------- 22----399 5--RAID Controllers----22----421
有没有人对如何做到这一点有任何想法?
旁白:如果有人有兴趣,这就是我following
答案 0 :(得分:3)
通过将OVER
添加为第二个id
项,使ORDER BY
子句中的顺序唯一:
SELECT *,
SUM(Sales) OVER (ORDER BY sales DESC, id) as running_sales
FROM t
ORDER BY sales DESC, id;
您拥有它的方式,同等销售额被视为同一FRAME
中的同行并立即汇总。
tutorial you were following对此特定查询无益。
此外,您可能希望在查询本身中添加ORDER BY
以获得稳定的结果。这非常便宜,因为它与窗口函数的排序顺序一致。
现在实现的方式,您通常会按照窗口函数的顺序从简单查询中获取此查询的结果,因为这是最便宜的方式。但是Postgres不保证没有ORDER BY
的行的排序,任意顺序可以在没有警告的情况下改变。