mysql - 通过Mysql查询动态获取排名

标签 mysql select group-by ranking

我有一个像这样的结果表:


ID  STUDENT_ID  Branch_id   Class_id    Exam_id Subject_id  Numbers     Date
1       653         5           1           1   8               60      2012-01-01
2       653         5           1           1   9               40      2012-01-01
3       653         5           1           1   10              80      2012-01-01
4       653         5           1           1   11              50      2012-01-01
5       653         5           1           1   12              65      2012-01-01
6       653         5           1           1   13              33      2012-01-01
7       653         5           1           1   15              86      2012-01-01
8       222         5           1           1   8               100     2012-01-01
9       222         5           1           1   9               80      2012-01-01
10      222         5           1           1   10              92      2012-01-01
11      222         5           1           1   11              50      2012-01-01
12      222         5           1           1   12              65      2012-01-01
13      222         5           1           1   13              33      2012-01-01
7       222         5           1           1   15              86      2012-01-01

My Desire Result like:


Student_ID  Math    English      Science    Total   Rank
1       90  89      88  267  1
2       90  89      88  267  1
3       58  45      98  201      2


I want to get student rank by this method:

Reference Link

SET @rank = 0, @prev_val = NULL;

SELECT rank, correct FROM 
(
    SELECT 
        @rank := IF(@prev_val=correct,@rank,@rank+1) AS rank,
        @prev_val := correct AS correct, uid
    FROM quiz_user 
    ORDER BY correct DESC
)as result WHERE uid=xxxxxxxxxxxx

这个查询我只需要表结构之间的区别,帖子的作者在正确的列上分配排名,我需要在对所有数字求和后在数字 SUM(numbers) 列上分配排名。

请帮助。

最佳答案

试试这个:

SELECT STUDENT_ID, Numbers, IF(@marks=(@marks:=Numbers), @auto, @auto:=@auto+1) rank 
FROM (SELECT STUDENT_ID, SUM(Numbers) Numbers
      FROM quiz_user 
      GROUP BY STUDENT_ID 
      ORDER BY Numbers DESC, STUDENT_ID 
     ) AS A, (SELECT @auto:=0, @marks:=0) AS B;

关于mysql - 通过Mysql查询动态获取排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352534/

相关文章:

mysql - mysql case when子句中的子查询

php - 使用 php 从上一页获取值以显示在当前页面上

mysql - 如何在 Telerik 网格中显示数据?

MySQL - 大型数据库,提高搜索时间

python - Pandas - 如果满足条件则进行分组

用于查找 count > 1 的记录的 SQL 查询

php - "Parse error: syntax error, unexpected T_STRING"与远程服务器一起使用时,会被抛出到之前工作的代码中。为什么?

php - 带有位置占位符的 MySQL SELECT IN 仅根据字符串中的第一个值进行选择/过滤

javascript - Firefox 中的 onchange 被触发而不改变

mysql - GROUP BY 上的三个表联接不会产生正确的结果