0

tblスコア:(csv;ここでテーブルスキーマをフォーマットする方法がわかりません)

test_id, student_id, score   
1, 1, 75  
1, 2, 84  
1, 3, 60  
2, 1, 82  
1, 4, 90  
1, 5, 75  
2, 2, 70  
2, 3, 90  
2, 5, 76   

私がする必要があるのは、各スコアの各テストについて、そのスコアの学生数を計算し、各テストのスコアが何パーセンタイルであるかを計算することです。

クエリを使用して、スコアごとに学生の数を正常にカウントしました。

SELECT test_id, score, COUNT(student_id) as num_students FROM Scores GROUP BY test_id, score

この時点で、各テストの各スコアの #at、#below、および #above を取得して、それぞれのパーセンタイルを計算しようとしています。

これはある種のピボットテーブルでしょうか?

4

2 に答える 2

0

相関関係がある必要はありませんが、クロスジョインと明確なためにパフォーマンスが低下する可能性があります。パフォーマンスが向上するか低下するかはわかりません

SELECT s.test_id, 
       s.score, 
       Count(DISTINCT s.student_id) AS num_students, 
       Count(DISTINCT z.student_id) AS below 
FROM   scores s 
       LEFT JOIN scores z 
              ON s.test_id = z.test_id 
                 AND s.score > z.score 
GROUP  BY s.test_id, 
          s.score 
ORDER  BY s.test_id, 
          s.score; 

Y http://sqlfiddle.com/#!2/fd824/13

于 2013-03-05T02:58:34.833 に答える
0

MySQL では、相関サブクエリを使用してこれを行う必要があります。以下は生徒数の例です。

 SELECT test_id, score, COUNT(student_id) as num_students,
        (select count(*) from scores s2 where s2.test_id = s.test_id and s2.score < s.score
        ) as below
 FROM Scores s
 GROUP BY test_id, score
于 2013-03-05T02:36:27.877 に答える