我正在尝试组合一个查询,该查询将在一段时间内检索用户的统计数据(利润/损失)作为累积结果。
这是我到目前为止的查询:
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 场比赛,并且用户从一场比赛中获得 20 英镑,从另一场比赛中获得 40 英镑),则上面会出现多行。
显而易见的解决方案是将其修改GROUP BY
为:
GROUP BY p.name, e.date, e.event_id
但是,Postgres 对此抱怨,因为它似乎没有意识到这一点sp.payout
并且s.buyin
在聚合函数中。我得到错误:
列“sp.payout”必须出现在 GROUP BY 子句中或在聚合函数中使用
我在 Ubuntu Linux 服务器上运行 9.1。
我是否遗漏了什么,或者这可能是 Postgres 的真正缺陷?