mysql - 按分数对 mysql 中的用户进行排名

标签 mysql sql sorting ranking mysql-variables

我正在尝试根据我之前计算的分数对我的学生进行排名 但问题是如果学生的分数相同,他们应该处于同一等级 例如

学生1获得满分 学生2满分

他们都必须排名为1;

enter image description here 这是我的数据库的一个例子

我想做的查询是(只是为了选择然后我可以将值插入我的列)

 SELECT  a.points
        count(b.points)+1 as rank
FROM  examresults a left join examresults b on a.points>b.points
group by  a.points;

编辑更清晰:

  • 学生 1 分 80
  • 学生 2 分 77.5
  • 学生 3 分 77.5
  • 学生 4 分 77

他们的排名应该是这样的

  • 学生 1 排名 1
  • 学生 2 排名 2
  • 学生 3 排名 2
  • 学生 4 排名 3

我当前的查询返回一个类似的值

enter image description here

因为它少了第三个等级。 (因为二等有2个值)

最佳答案

这只是使用变量修复 Gordon 解决方案。问题是你的排名功能不是排名应该工作的方式。 (学生 4 应该是第 4 位)

SQL Fiddle Demo 您可以添加更多学生以改进测试。

select er.*,
       (@rank := if(@points = points, 
                    @rank, 
                    if(@points := points,    
                       @rank + 1, 
                       @rank + 1                       
                      )
                   )                  
       ) as ranking
from students er cross join
     (select @rank := 0, @points := -1) params
order by points desc;

输出

| id | points | ranking |
|----|--------|---------|
|  1 |     80 |       1 |
|  2 |     78 |       2 |
|  3 |     78 |       2 |
|  4 |     77 |       3 |
|  5 |     66 |       4 |
|  6 |     66 |       4 |
|  7 |     66 |       4 |
|  8 |     15 |       5 |

关于mysql - 按分数对 mysql 中的用户进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637943/

相关文章:

sql - 图书数据库数据

sql - Spark 将列值拆分为多行

c++ - 对我的数组进行排序时遇到问题。为什么我的数组不能正确排序?

java - 当这些是对象时,如何根据映射的值而不是键对映射进行排序?

mysql - 我应该在任务表中使用哪个主 ID

mysql - 当三个重复但不只是一个重复时更新重复列

MySQL 连接 3 个表未返回所有结果

php - 连接到 Google 应用引擎上的远程 MySQL 数据库

MySQL查询根据表B进行的逻辑测试更新表A

Python 按两个值对列表进行排序