2009-04-19 108 views
1

我有兩個表:Mysql的最大查詢

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

,我需要顯示的老師的名字,教學課程的最大數量:

的mysql>選擇teachers.teacher_name,tmp1.teacher_id,TMP1 .cnt from(選擇max(tm p.cnt)as tmpMax from(選擇teacher_id,count(teacher_id)as cnt from course g groups by teacher_id)as tmp)as tmp2,(選擇teacher_id,count(teacher_id)as cnt from course group by teacher_id)as tmp1,teachers where tmp1.cnt = tmp2.tmpMax and teac 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

SELECT teacher_id,TEACHER_NAME,COUNT(1)course_count
教師
WHERE course_count =(SELECT MAX(COUNT(1))FROM課程GROUP BY teacher_id)
GROUP BY teacher_id

+0

錯誤1054(42S22):'where子句'中的未知列'course_count' – dharm0us 2009-04-19 05:59:41

-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