我试图做同样的事情到this但额外的复杂性,我需要组由共同领域PostgreSQL的排名查询
我有两个表,一个是competition_users
(对那些在比赛中竞争)和另一competition_times
(存储他们最快的时间),但同一张桌子上有许多不同的比赛。
我已经创造了competition_times
表中的新列rank
现在需要运行现有用户展示自己的排名在其竞争的更新,我想修改其他给出的解决方案没有成功
表是如下...
competition_users:
competition_user_id
,competition_id
competition_times:
competition_time_id
,competition_user_id
,time_in_seconds
,rank
我不知道,如果它可以使用GROUP BY
?或者,如果有另一种方式,到目前为止,我想这样的事情...
UPDATE competition_times
SET rank = r.rnk
FROM (
SELECT competition_time_id
, dense_rank() OVER (ORDER BY time_in_seconds ASC) AS rnk
FROM competition_times, competition_users
WHERE competition_times.competition_user_id = competition_users.competition_user_id
GROUP BY competition_users.competition_id
) r
WHERE competition_times.competition_time_id = r.competition_time_id
使用PostgreSQL 9
感谢
而你的问题是? – 2012-02-27 20:07:08
是否应该在'competition_users'表上也有'rank'字段(这是你的SQL建议的)? – tomtheguvnor 2012-02-27 20:12:12
@tomtheguvnor不,这是一个复制和粘贴错误,排名是针对比赛时间(因为这是一个时间点快照) – DaveB 2012-02-27 20:44:00