17

ここに私の問題があります..

Actual   Auction   Ammanat   id
7000     500       100       228,229
7000     100       100       228,229
7000     900       100       228,229
5000     0         0         230

以下の結果が欲しい

Actual   Auction   Ammanat   Remaining  id
7000     500       100       5550       228,229
7000     100       100       5550       228,229
7000     900       100       5550       228,229
5000     0         0         5000        230

ここでは、Remainingです(sum(auction)-actual)

私はPostgreSQLを使用しています。しかし、誰かが SQL Server のソリューションを知っていれば、問題ありません。

4

2 に答える 2

22

ウィンドウ関数を使用するには、 http://www.postgresql.org/docs/9.3/static/tutorial-window.htmlが必要です。

何かのようなもの:

(Sum(Auction) OVER ()) - actual AS Remaining
于 2013-10-09T12:18:32.113 に答える
14

Idan は 100% 正しいです。これについて次のように説明したいと思います。

(SUM (Auction) OVER ())
  • OVER ()元のクエリのすべての行を含むウィンドウを作成します。
  • SUM (Auction)の合計を計算するウィンドウ関数Auctionです。

ここにさらなる説明があります:

  • ウィンドウは、クエリ結果セット内のユーザー指定の行セットです。

  • ウィンドウ関数SUMは、ウィンドウ内のすべての行の値 (例: ) を計算します。

  • OVER()が含まれていないため、すべての行がウィンドウ内にありますPARTITION BY。ウィンドウにPARTITION BYは、行のサブセットが含まれます。

MSDN から:

...OVER 句は、クエリ結果セット内のウィンドウまたはユーザー指定の行セットを定義します。ウィンドウ関数は、ウィンドウ内の各行の値を計算します。関数で OVER 句を使用して集計値を計算できます... OVER 句に PARTITION BY が含まれていない場合。これは、クエリによって返されるすべての行に関数が適用されることを意味します。

于 2015-04-23T18:42:50.860 に答える