1

次のようなSQL結果があります。

 name | points
------+-------
 Joe  | 2
 Joe  | 5
 Joe  | 4
 Joe  | 1

各行は、Joe がイベントごとに獲得したポイント数を表します。

ジョーには基本的な予算があり、100 ドルとしましょう。

ここで行う必要があるのは、1 ポイントが $10 の追加を意味する場合に、実際の予算値を表すフィールドを追加することです。予算の伸びの歴史のようなもの。

結果は次のようになります。

 name | points | budget
------+--------+-------
 Joe  | 2      | 120
 Joe  | 5      | 170
 Joe  | 4      | 210
 Joe  | 1      | 220

変数の使用は私にとって最良の解決策のように思えますが、PostgreSQL はそれとあまり友好的ではないため、結果の最初の x 行の要約を使用して最初から実際のポイントの合計を取得する解決策を探しています。

各行をサブ選択せずにこれを行う方法はありますか?

4

2 に答える 2

1
select name, 
       points,
       100 + sum(points * 10) over (partition by name order by some_timestamp_column) as budget
from the_table
order by some_timestamp_column

これを使用するには、行に対して安定した並べ替え順序を定義する列が必要です

于 2013-06-13T13:58:10.257 に答える
1

Postgres はOVER、次のような句を使用して、このタイプの累積をサポートします。

SELECT name, points, SUM(points * 10) OVER (ORDER BY .. order field ..)
FROM .. table ..
GROUP BY .. unique field ..

サブセレクトを使用しないクロスデータベースの代替手段は、この列をホスト言語 (php、java など) に追加し、データベースでは実行しないことです。

于 2013-06-13T13:57:16.770 に答える