【发布时间】:2020-08-17 17:59:14
【问题描述】:
我想按总分排名。示例:猜谜游戏。第一天:甲猜得10分,乙猜得9分。第 2 天:A 得 5 分,B 得 9。
我想要得到的是: 第 2 天,A 的总积分为 15 分,排名第 2。
这是基本表guesses:
id, person, points, day
1, thomas, 10, 1
2,thomas,5,2
3,marie,9,1
4,marie,9,2
按天分组的聚合点没有问题:
SELECT
*,
sum(points) OVER (PARTITION BY person ORDER BY id) AS total_running_points,
FROM
guesses
ORDER BY
day asc;
但现在我需要每天排名。
我尝试了以下但失败了,因为total_running_points 是一个新别名:
SELECT
*,
sum(points) OVER (PARTITION BY person ORDER BY id) AS total_running_points,
rank() OVER (ORDER BY total_running_points desc)
FROM
bets_by_day
ORDER BY
day asc;
我觉得我应该使用子查询,但后来我想知道如何对其进行分区。
我该如何解决这个问题?
【问题讨论】:
标签: sql postgresql sum subquery window-functions