1

次のような結果テーブルがあります。

ID STUDENT_ID Branch_id Class_id Exam_id Subject_id 数字 日付
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

私の欲望の結果は次のようになります。

Student_ID 数学 英語 理科 総合順位
1 90 89 88 267 1
2 90 89 88 267 1
3 58 45 98 201 2


この方法で学生ランクを取得したい:

参照リンク

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) 列にランクを割り当てる必要があるテーブル構造の違いのみが必要です。

助けてください。

4

1 に答える 1

1

これを試して:

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;
于 2013-01-16T06:37:14.670 に答える