2009-04-19 15 views
1

は、私は2つのテーブルがあります。MySQLの最大クエリ

MySQLの>を選択しteachers.teacher_name、tmp1.teacher_id、TMP1:コースの最大数を教え、

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

をそして、私は教師の名前を表示する必要がありますtmpMaxから(tmaxとしてtmaxMを選択し、tmp2として教室g roupから教師IDを選択)をtmp2として選択します(teacher_id、count(teacher_id)をcntとして選択します)。 講義グループからteacher_id)をtmp1として、tmp1.cnt = tmp2.tmpMax とティーhers.teacher_id = tmp1.teacher_id;

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

答えて

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の中にある教師の名前を検索 - 数教師のグループが>
  • をコースの - >
  • 最大数に等しい - >
  • 教師1人当たりのコース数のリスト

希望するものがあります。

-1

SELECT teacher_id、TEACHER_NAME先生、COUNT(1)course_count AS course_countは=(MAX(COUNT(1))teacher_id BYコースのグループから選択)teacher_id BY
GROUP

+0

ERROR 1054(42S22): 'where句'の 'course_count'列が不明です – dharm0us

+0

count(1)は何を表しますか? – dharm0us

+0

COUNT(*) - レコード数と同じ意味です。次に、 "WHERE COUNT(1)="と "WHERE COURCE_COUNT ="を置き換えます。 – dkretz

-1

これを与える教師
FROM
ショット:

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