一定期間の累積結果としてユーザーの統計(利益/損失)を取得するクエリをまとめようとしています。
これが私がこれまでに持っているクエリです:
SELECT p.name, e.date,
sum(sp.payout) OVER (ORDER BY e.date)
- sum(s.buyin) OVER (ORDER BY e.date) AS "Profit/Loss"
FROM result r
JOIN game g ON r.game_id = g.game_id
JOIN event e ON g.event_id = e.event_id
JOIN structure s ON g.structure_id = s.structure_id
JOIN structure_payout sp ON g.structure_id = sp.structure_id
AND r.position = sp.position
JOIN player p ON r.player_id = p.player_id
WHERE p.player_id = 17
GROUP BY p.name, e.date, e.event_id, sp.payout, s.buyin
ORDER BY p.name, e.date ASC
クエリが実行されます。ただし、結果は少し不正確です。その理由は、event
が複数のゲーム(異なるsp.payouts
)を持つことができるためです。したがって、ユーザーが異なる支払いのイベントで2つの結果を持っている場合(つまり、イベントごとに4つのゲームがあり、ユーザーは1つから£20、もう1つから£40を取得します)、上記は複数の行で表示されます。
明らかな解決策は、次のように修正するGROUP BY
ことです。
GROUP BY p.name, e.date, e.event_id
sp.payout
ただし、Postgresはそれを認識していないようでs.buyin
あり、集計関数内にあるため、これに不満を持っています。エラーが発生します:
列「sp.payout」は、GROUP BY句に含めるか、集計関数で使用する必要があります
UbuntuLinuxサーバーで9.1を実行しています。
私は何かが足りないのですか、それともこれはPostgresの真の欠陥でしょうか?