私は次のようなmysqlテーブルを持っています:
サンプルデータ
ID STUDENT_ID Branch_id Class_idExam_idSubject_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 8222 5 1 1 8100 2012-01-01 9222 5 1 1 9 80 2012-01-01 10222 5 1 1 10 92 2012-01-01 11222 5 1 1 11 50 2012-01-01 12222 5 1 1 12 65 2012-01-01 13222 5 1 1 13 33 2012-01-01 7222 5 1 1 15 86 2012-01-01
2人の生徒の点数が同じでも、クラスの生徒のランクを取得する必要があります。たとえば、2人の生徒が600点満点で600点を獲得した場合、それは両方が1位であることを意味します。
私は多くのサイトを検索し、必要なものが機能するこの投稿を見つけましたが、この投稿では正しい列はすでに点数の合計ですが、私のテーブルでは合計(数)してから学生のランクを取得する必要があります。
これはすべて、私が独身の学生の結果を取得したときです。
すべてのクラスの結果を取得したときの同じデータには、2つのニーズがあります。結果をExcel形式で表示する最初の行から列へのピボットクエリなので、次のように行から列へのクエリを使用します。
SELECT m.*
FROM (
select student_id, branch_id, class_id, numbers, exam_id, date
, sum(numbers*(1-abs(sign(subject_id-1)))) as subs1
, sum(numbers*(1-abs(sign(subject_id-2)))) as subs2
, sum(numbers*(1-abs(sign(subject_id-3)))) as subs3
, sum(numbers*(1-abs(sign(subject_id-4)))) as subs4
, sum(numbers*(1-abs(sign(subject_id-5)))) as subs5
, sum(numbers*(1-abs(sign(subject_id-6)))) as subs6
from results
GROUP BY student_id, branch_id, class_id, exam_id
) m
where branch_id = '6'
and class_id = '1'
and exam_id = '1'
and YEAR(date) = '2013'
必須の結果次のようなクラスクエリで:
ID名数学英語科学合計パーセント位置ランク
そして、私はこのクエリでうまく結果を得ました。しかし、同じクエリで学生のランクを取得する方法にはまだ問題がありますか?
誰か助けてもらえますか?