1

各生徒にはいくつかのスコアがあります (各スコアにはstudent_id列があります)。

私は学生の平均を計算し、彼の平均を他の学生と比較し、クラスでの彼の位置を見つけたいと思っています。

1回のクエリで彼の平均に基づいて彼の位置を見つけることは可能ですか? (サブクエリまたは結合を含む場合があります)

次のクエリを使用して、すべての学生を平均で並べ替えることができます。

SELECT s.*
FROM
  scores s LEFT JOIN lessons lesson
  ON lesson.id = s.lesson_id
WHERE lesson.display = 1
GROUP BY s.student_id
ORDER BY AVG(s.score) DESC

array_searchただし、PHP関数で処理する必要があります。(この状況では、MySQL関数を使用する方が良いと思います)

4

4 に答える 4

0

結果セットに対してユーザー定義変数を使用する必要があります。

これを試して:

SELECT *, (@rank := if(@rank is null, 1, @rank + 1)) as rank
FROM (SELECT s.*
  FROM scores s 
  LEFT JOIN lessons lesson ON lesson.id = s.lesson_id
  WHERE lesson.display = 1
  GROUP BY s.student_id 
  ORDER BY AVG(s.score) DESC
) x
于 2013-01-31T14:05:54.977 に答える
0
select student_id, AVG(scores) as 'average' from lessons as l, scores as s 
where lessons.id = s.lesson_id and lesson.display = 1 
GROUP BY s.student_id order by average desc`

このクエリを試してください

サンプルhttp://sqlfiddle.com/#!2/4fb8d/1

お役に立てれば

于 2013-01-31T12:32:04.283 に答える