mysql - 如何处理 MySQL 排名列中的平局

标签 mysql sql-update

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

这是我当前的查询:

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

我已经阅读了大量帖子,但没有在更新中找到执行此操作的解释。

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

最佳答案

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

关于mysql - 如何处理 MySQL 排名列中的平局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974000/

相关文章:

sql-server - 使用一对多 JOIN 进行更新(多列)

mysql - DATE_ADD 函数在更新中不起作用

mysql - SQL - #1093 - 表 '' 被指定了两次,既作为 'UPDATE' 的目标又作为单独的数据源

mysql - InnoDB x-locks in READ COMMITTED 隔离级别

php和mysql更新两个表以及一键插入两个表的问题

Mysql2::Error: 指定的键太长;最大 key 长度为 767 字节

php - MariaDB 错误与看似正确的事务 SQL

php - 像这样从数据库中回显阿拉伯字符串?

mysql - 如何在索引中选择正确的列以获得更好的性能

sql - 动态创建时间戳