我有两张桌子:
teachers (teacher_id,teacher_name)
courses (teacher_id,course_id)
我需要显示教师的姓名,教授最多课程数量:
的MySQL>选择teachers.teacher_name,tmp1.teacher_id,tmp1.cnt from(select max(tm p.cnt)作为tmpMax来自(选择teacher_id,count(teacher_id)作为来自课程g的cnt roup by teacher_id)as tmp)as tmp2,(select teacher_id,count(teacher_id)as cnt 从teacher_id的课程组)到tmp1,教师在哪里tmp1.cnt = tmp2.tmpMax 和teachers.teacher_id = tmp1.teacher_id;
我想出了上面的查询。是否有更简单的查询此问题?
答案 0 :(得分: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 :(得分:-1)
SELECT teacher_id,teacher_name,COUNT(1)AS course_count
来自老师
WHERE course_count =(SELECT MAX(COUNT(1))FROM课程GROUP BY teacher_id)
GROUP BY teacher_id
答案 2 :(得分:-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