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のORACLESrank()に相当

于 2012-12-20T14:49:32.107 に答える