如何解决如何在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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。