Mysql Макс запрос - PullRequest
       7

Mysql Макс запрос

1 голос
/ 19 апреля 2009

У меня есть две таблицы:

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

А мне нужно отобразить имена преподавателей, преподающих максимальное количество курсов:

mysql> выберите teacher.teacher_name, tmp1.teacher_id, tmp1.cnt из (выберите max (tm p.cnt) как tmpMax from (выберите teacher_id, count (teacher_id) как cnt из курсов g Группировать по teacher_id) как tmp) как tmp2, (выберите teacher_id, count (teacher_id) как cnt из группы курсов by teacher_id) как tmp1, учителя где tmp1.cnt = tmp2.tmpMax and teacher.teacher_id = tmp1.teacher_id;

Я пришел с вышеуказанным запросом. Есть ли более простой запрос для этой проблемы?

Ответы [ 3 ]

1 голос
/ 26 мая 2009

Это должно работать:

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 есть ->
  • Группа преподавателей, количество курсов которых ->
  • равно максимальному числу ->
  • Список номеров курсов на преподавателя

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

0 голосов
/ 19 апреля 2009

Дайте этому шанс:

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
0 голосов
/ 19 апреля 2009

ВЫБРАТЬ идентификатор учителя, имя учителя, СЧЕТ (1) КАК курс_счета
ОТ учителя
ГДЕ course_count = (ВЫБЕРИТЕ МАКС. (COUNT (1)) ИЗ КУРСОВ GROUP BY teacher_id)
GROUP BY teacher_id

...