2012-12-20 29 views
2

我想根據總分列對排名進行排名,但如果分數相同,我需要聯繫。下面的查詢成功排名,但排名上升,即使有平局。我該如何處理MySQL排名欄中的領帶

這裏是我當前的查詢:

SET @r=0; UPDATE table SET rank= @r:= (@r+1) WHERE `complete` = 1 ORDER BY score DESC; 

我一直在讀一噸的職位,但沒有發現在UPDATE這樣的解釋。

+----+-----------+-------------+-------------+ 
| id | lName  | score  | rank  | 
+----+-----------+-------------+-------------+ 
| 1 | Rosebrock |   50 |   5 | 
| 2 | Kolley |   58 |   3 | 
| 3 | Bartley |   11 |   6 | 
| 4 | Bell  |   58 |   4 | 
| 5 | Daugherty |   63 |   2 | 
| 85 | Harp  |   78 |   1 | 
+----+-----------+-------------+-------------+ 
+2

您能不能告訴我們您的樣本數據和請問桌子? – bonCodigo

+0

@bonCodigo,對不起,花了這麼久......我只真的使用續集親。終端白癡。 – doublenit

+1

給予你一些尊重,刪除評論中的'白癡'部分;)。現在已經有很好的答案。 – bonCodigo

回答

3
create table scores (
    id INT NOT NULL AUTO_INCREMENT, 
    score INT NOT NULL, 
    rank INT NOT NULL DEFAULT 0, 
    PRIMARY KEY (id) 
) ENGINE=InnoDB; 

INSERT INTO scores (score) VALUES (1), (20), (10), (25), (10), (20); 

SET @rank=0, @score=-100; 

UPDATE scores 
SET rank=IF(@score=(@score:=score), @rank, @rank:[email protected]+1) 
ORDER BY score; 

同樣在這裏:http://sqlfiddle.com/#!2/90c3b/2/0

+0

這樣做!謝謝你,我的朋友! – doublenit