2009-04-19 3 views
1

У меня есть две таблицы:Mysql Max запрос

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

И мне нужно, чтобы отобразить имена учителей, обучая максимальное количество курсов:

MySQL> выберите teachers.teacher_name, tmp1.teacher_id, tmp1 .cnt from (выберите max (tm p.cnt) в качестве tmpMax из (выберите teacher_id, count (teacher_id) как cnt из курсов g roup by teacher_id) как tmp) в качестве 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 
     ) 
    ) 
) 

логики в псевдо-коде:

  • Найти имена учителей, чьи идентификаторы в ->
  • группа учителей, число которых курсов ->
  • Допустимое максимальное число ->
  • Список номеров курсов на одного учителя

Надеюсь, что это поможет.

-1

ВЫБОР teacher_id, TEACHER_NAME, COUNT (1) КАК course_count
ОТ учителей
ГДЕ course_count = (SELECT MAX (COUNT (1)) из курсов GROUP BY teacher_id)
GROUP BY teacher_id

+0

ОШИБКА 1054 (42S22): Неизвестная колонка 'course_count' в 'where clause' – dharm0us

+0

что означает (1)? – dharm0us

+0

Это означает то же, что и COUNT (*) - количество записей. Затем замените «WHERE course_count =» на «WHERE COUNT (1) =" – dkretz

-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