3

次のようなマークシート テーブルがあります。

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

ランクを取得したい この質問で回答を得ました

また、すべてのクラスの結果をフェッチするときは、ピボット クエリを使用します。

SELECT stu_id, sum(numbers) AS total, branch_id, depart_id, class_id,
 SUM( IF( subject_id =1, numbers, 0 ) ) AS MAth,
 SUM( IF( subject_id =2, numbers, 0 ) ) AS Eng,
SUM( IF( subject_id =3, numbers, 0 ) ) AS Science
FROM marksheet where branch_id = 1 AND depart_id = 1
 AND class_id = 1 GROUP BY stu_id ORDER BY total DESC

クラス クエリ (ピボット クエリ) でランクを取得したいですか? そして、1 位の生徒数と 2 位と 3 位の生徒数を数えたいですか?

必要なデータ サンプル:

ID 名前 数学 英語 科学 合計 パーセント ポジション ランク

誰か助けて?

4

1 に答える 1

2

あなたがする必要があるのは、たとえば参照されているグレード境界を持つ2番目のテーブルを作成することだと思います:

ID    grade    start_boundry    end_boundry
1       A             60            100     

など..

次に、テーブル間の結合を作成しWHERE、数値と開始/終了境界の間でステートメントを実行します

そう - >

SELECT grade FROM boundries_table RIGHT JOIN  sudent_table
WHERE boundries_table.start_boundry < student_table.numbers
AND boundries_table.end_boundry > student_table.numbers

私のMySQLメモリが機能する場合、それは機能するはずだと思います。テーブルを実行するために必要な方法に変更するだけで、必要な方法で機能するはずです。

于 2013-01-17T11:24:01.973 に答える