如何在Postgresql中对汇总金额进行排名?

问题描述

我想按汇总分数排名。示例:一个猜谜游戏。第一天:A人猜出10分,B人猜出9分。第2天:人员A得5分,人员B得9分。

我想要得到的是: 在第2天,人员A的总积分为15分,排名为2。

这是基本表guesses

id,person,points,day
1,thomas,10,1
2,5,2
3,marie,9,1
4,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
    *,rank() OVER (ORDER BY total_running_points desc)
FROM
    bets_by_day
ORDER BY
    day asc;

我觉得我应该使用子查询,但是我想知道如何对其进行分区。

我该如何解决

解决方法

您可以使用子查询:

SELECT b.*,rank() over (order by total_running_points desc) rnk
FROM (
    SELECT b.*,sum(points) over (partition by person order by id) AS total_running_points
    FROM bets_by_day b
) b
ORDER BY day asc;