如何使用sql Rank对分数进行排名

时间:2018-10-22 09:44:52

标签: mysql sql

我一直在尝试对数据库中的某些分数进行排名,但是输出错误。我以前做过,但是我忘记了我是怎么做的。

sql

 SELECT `total_score`, FIND_IN_SET( `total_score`, (
SELECT GROUP_CONCAT( DISTINCT `total`
ORDER BY `total_score` DESC ) FROM `table` WHERE `class`="class" AND `session`="2018/2019")
) AS rank
FROM `table` WHERE `class`="class" AND `session`="2018/2019";

这是目前正在使用的数据 scores

输出
Output

从输出中,最高分是获得最低排名的得分。我使用group_concat是因为我希望能够选择具有相同班级和会话的数据范围,然后对总分进行排名,并且我希望最高分成为第一。 希望如此

我获得的数据非常庞大,我只希望能够选择学生班级,学术课程或其他内容,即他们对该特定课程的总分并对他们进行排名。

1 个答案:

答案 0 :(得分:0)

在旧版本的MySQL中,我建议使用变量:

SELECT total, (@rank := @rank + 1) as rank
FROM (SELECT DISTINCT CASTt.total + 0 as total
      FROM `table` t
      WHERE class = 'class' AND session = '2018/2019'
      ORDER BY total ASC
     ) t CROSS JOIN
     (SELECT @rank := 0) params;

在MySQL 8+中,您可以这样做:

SELECT DISTINCT t.total, DENSE_RANK() OVER (ORDER BY total + 0 ASC) as the_rank
FROM `table` t
WHERE class = 'class' AND session = '2018/2019'