2

学生名を持つ各クラスで最大数を取得している学生のリストを db から取得したいと考えています。MySQL DB の使用。

学生、クラス、結果などの次のテーブルがあります(異なる年の結果があります)

テーブル構造の学生(学生ID、学生名、クラスID、住所)、クラス(クラスID、クラス名)、結果(結果ID、学生ID、年、マーク)

そして、私は次のようなリストが必要です

Student Name   class   Marks
Jon            A-1      800
Steve          B-1      789
4

3 に答える 3

4

修正されたコードを編集し、コメントは正しかった

このSQLFiddleリンクのコードを試してください

于 2012-09-08T13:49:17.903 に答える
3

サブクエリを使用して、クラスごとに最高点の生徒をフィルタリングできます。

select  s.student_name
,       c.class_name
,       r.marks
from    results r
join    student s
on      r.student_id = s.student_id
join    class c
on      c.class_id = s.class_id
where   r.result_id =
        (
        select  r2.result_id
        from    student s2
        join    results r2
        on      s2.student_id = r2.student_id
        where   c.class_id = s2.class_id
        order by
                r2.marks desc
        limit   1
        )

SQLFiddleでの実例。

于 2012-09-08T13:57:16.443 に答える
1
select s1.student_name, c1.class_name, r1.marks 
from student s1, class c1, results r1,
  (select s2.class_id, max(r2.marks) marks 
   from results r2, student s2
   where r2.student_id = s2.student_id 
   group by s2.class_id) agg
where r1.marks      = agg.marks 
  and r1.student_id = s1.student_id
  and s1.class_id   = c1.class_id
  and s1.class_id   = agg.class_id
于 2012-09-08T14:08:16.407 に答える