我一直在尝试对数据库中的某些分数进行排名,但是输出错误。我以前做过,但是我忘记了我是怎么做的。
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";
从输出中,最高分是获得最低排名的得分。我使用group_concat是因为我希望能够选择具有相同班级和会话的数据范围,然后对总分进行排名,并且我希望最高分成为第一。 希望如此。
我获得的数据非常庞大,我只希望能够选择学生班级,学术课程或其他内容,即他们对该特定课程的总分并对他们进行排名。
答案 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'