2009-04-19 10 views
1

J'ai deux tables:Mysql Max requête

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

Et je dois afficher les noms des enseignants, l'enseignement nombre maximum de cours:

mysql> select teachers.teacher_name, tmp1.teacher_id, tmp1 .cnt de (sélectionnez max (tm p.cnt) comme tmpMax de (select teacher_id, count (teacher_id) comme cnt des cours g roup par teacher_id) comme tmp) comme tmp2, (select teacher_id, count (teacher_id) comme cnt du groupe de cours par teacher_id) en tant que tmp1, professeurs où tmp1.cnt = tmp2.tmpMax et teac hers.teacher_id = tmp1.teacher_id;

Je suis venu avec la requête ci-dessus. Y a-t-il une requête plus simple pour ce problème?

Répondre

1

Cela devrait fonctionner:

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 
     ) 
    ) 
) 

Logique en pseudo-code:

  • Trouvez les noms des enseignants dont les ID sont en ->
  • Le groupe d'enseignants dont le nombre est égal au nombre maximum de ->
  • La liste des numéros de cours par enseignant

espoir qui aide.

-1

SELECT teacher_id, TEACHER_NAME, COUNT (1) course_count
des enseignants
OÙ course_count = (SELECT MAX (COUNT (1)) des cours GROUP BY teacher_id)
GROUP BY teacher_id

+0

ERREUR 1054 (42S22): Colonne inconnue 'course_count' dans 'where clause' – dharm0us

+0

qu'est-ce que count (1) signifie? – dharm0us

+0

Cela signifie la même chose que COUNT (*) - le nombre d'enregistrements. Puis remplacez "WHERE course_count =" par "WHERE COUNT (1) =" – dkretz

-1

Donner cette un coup de feu:

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 

modifier Ce qui suit vous donnera exactement le même résultat que votre requête:

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