2

我想根据总分列对我的条目进行排名,但如果分数相同,我需要有联系。下面的查询成功排名,但即使出现平局,排名也会上升。

这是我当前的查询:

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 |
+----+-----------+-------------+-------------+
4

2 回答 2

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:=@rank+1)
ORDER BY score;

同样在这里:http ://sqlfiddle.com/#!2/90c3b/2/0

于 2012-12-20T14:51:20.773 回答
1

有关在 MySQL 中实现密集排名的一些想法,请参阅此问题/答案:

MySQL 相当于 ORACLES rank()

于 2012-12-20T14:49:32.107 回答