1

私は2つのテーブルを持っています:

teachers (teacher_id,teacher_name)
courses (teacher_id,course_id)

そして、最大数のコースを教えている教師の名前を表示する必要があります:

mysql> select Teachers.teacher_name、tmp1.teacher_id、tmp1.cnt from(select max(tm p.cnt)as tmpMax from(select Teacher_id、count(teacher_id)as cnt fromcourses g roup by Teacher_id)as tmp)as tmp2、 (teacher_idによるコースグループからcntとしてteacher_id、count(teacher_id)を選択)asp tmp1、teachersここで、tmp1.cnt=tmp2.tmpMaxおよびteachers.teacher_id=tmp1.teacher_id;

私は上記のクエリを思いついた。この問題に対するより簡単なクエリはありますか?

4

3 に答える 3

1

これはうまくいくはずです:

select teacher_name
from teachers
where teacher_id IN
(
    select t.teacher_id
    from teachers t inner join courses c on t.teacher_id = c.teacher_id
    group by t.teacher_id
    having count(*) = 
    (
        select max(courses_per_teacher) from
        (
            select teacher_id, count(*) as courses_per_teacher
            from teachers t inner join courses c on t.teacher_id = c.teacher_id
            group by teacher_id
        )
    )
)

疑似コードのロジック:

  • ID が入っている教師名を検索 -->
  • コース数の教師グループ -->
  • --> の最大数に等しい
  • 教師ごとのコース数のリスト

それが役立つことを願っています。

于 2009-05-26T14:00:53.380 に答える
-1

SELECT Teacher_id、Teacher_name、COUNT(1)AScourse_countFROM
教師
WHEREcourse_count=(SELECT MAX(COUNT(1))FROMコースGROUP BY Teacher_id)
GROUP BY Teacher_id

于 2009-04-19T05:50:09.277 に答える
-1

これを試してみてください:

select a.teacher_name as 'Teacher', count(b.course_id) as 'Num of Courses'
from teachers a
inner join courses b on a.teacher_id = b.teacher_id
group by b.teacher_id
order by count(b.course_id) desc

編集 以下は、クエリとまったく同じ結果を提供します。

select a.teacher_name as 'Teacher', a.teacher_id as 'Teacher Id', count(b.course_id) as 'Num of Courses' 
from teachers a 
inner join courses b on a.teacher_id = b.teacher_id 
group by b.teacher_id 
order by count(b.course_id) desc 
limit 1
于 2009-04-19T06:20:03.883 に答える