2011-08-17 117 views
0

在MySQL排名時,我需要一些幫助來處理關係。例如:MySQL在排名情況下排名

PLAYER |點

  • 瑪麗:90
  • 鮑勃:90
  • 吉姆:65
  • 凱文:12

鮑勃和瑪麗都應該排在首位。吉姆應該是#3。凱文應該是#4。

的MySQL:

SET @rank=0; 
SELECT @rank:[email protected] +1 as rank, player, points FROM my_table 

我如何更改SELECT語句,以便名次並列的情況是正確的?

我現實生活中的問題比較複雜,但如果我明白如何解決上述問題,那麼我應該設置。

回答

2

假設名稱是唯一

SELECT t1.name, (SELECT COUNT(*) FROM table_1 t2 WHERE t2.score > t1.score) +1 
AS rnk 
FROM table_1 t1 
+0

非常感謝這封郵件。據我瞭解,t2是table_1的別名?我理解正確嗎? – Laxmidi

+0

是的,正好... – a1ex07

+0

很酷...非常感謝您的幫助! – Laxmidi

2
SELECT players.*, COUNT(higher_ranking.id) + 1 AS rank 
    FROM players 
    LEFT JOIN players AS higher_ranking 
     ON higher_ranking.points > players.points 
    GROUP BY players.id 

在Postgres的,你可以使用window functions RANK()來實現這一點,這是好多了。我不知道MySQL的任何東西。

+0

你確定你的查詢?它返回給我「你的SQL語法有錯誤;檢查與你的MySQL服務器版本相對應的手冊,在'*)附近使用正確的語法」 –

+0

現在它是完美的。 upvoted兩個答案。 :) –

+0

我對兩個查詢進行了基準測試,a1ex07的查詢速度更快。我確實希望JOIN能夠在這裏更好地工作......我不確定爲什麼它的子查詢速度更快。 – shesek