2

私が抱えている問題は、一意でない値または「販売」で SUM を使用すると、一意でない累積合計または「実行中の販売」が発生するという点で、Postgres にあります。

クエリは次のとおりです。

SELECT *, 
       SUM(Sales) OVER (ORDER BY sales DESC) as running_sales 
FROM t;

ここに出力があります

基本的に、この表を次のように読みたいと思います。

4--マザーボード------- 22----399
5--RAID コントローラ----22----421

どうすればこれを行うことができるかについて誰かアイデアがありますか?

余談: 誰かが興味を持っているなら、これは私がフォローしていたものです

4

1 に答える 1

3

2 番目の項目としてOVER追加して、句内の順序を一意にします。idORDER BY

SELECT *, 
       SUM(Sales) OVER (ORDER BY sales DESC, id) as running_sales 
FROM   t
ORDER  BY sales DESC, id;

あなたが持っていた方法では、等しい売上は同じものとして扱われFRAME、一度に合計されます。
あなたが従ったチュートリアルは、この特定のクエリには適していません。

ORDER BYまた、安定した結果を得るために、クエリ自体にを追加することもできます。これは、ウィンドウ関数のソート順と一致するため、非常に安価です。

現在実装されている方法では、通常、単純なクエリのウィンドウ関数の順序でこのクエリから結果を取得します。これが最も安価な方法だからです。しかし、Postgres は行の順序を保証しませんORDER BY。任意の順序は警告なしに変更される可能性があります。

于 2013-06-03T22:41:28.177 に答える