我試圖做同樣的事情到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