1

我有两张桌子:

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

我需要显示教师的姓名,教授最多课程数:

mysql> select teacher.teacher_name,tmp1.teacher_id,tmp1.cnt from (select max(tm p.cnt) as tmpMax from (select teacher_id,count(teacher_id) as cnt from course g roup by teacher_id) as tmp) as tmp2, (select teacher_id,count(teacher_id) as cnt from courses by teacher_id) as tmp1,teachers where tmp1.cnt = tmp2.tmpMax and teacher.teacher_id = tmp1.teacher_id;

我想出了上面的查询。这个问题有更简单的查询吗?

4

3 回答 3

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 所在的教师姓名 -->
  • 课程数量为的教师组 -->
  • 等于最大数量 -->
  • 每位教师的课程数量列表

希望有帮助。

于 2009-05-26T14:00:53.380 回答
-1

SELECT teacher_id, teacher_name, COUNT(1) AS course_count
FROM Teachers
WHERE course_count = (SELECT MAX(COUNT(1)) FROM courses GROUP BY teacher_id)
GROUP BY teacher_id

于 2009-04-19T05:50:09.277 回答
-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
于 2009-04-19T06:20:03.883 回答