lintcode-2069 · 查询每个教师授课学生人数最高的课程名称和上课人数

543 阅读2分钟

描述

请编写 SQL 语句,从课程表 courses 中查询每个教师授课学生人数最高的课程名称 name 和上课人数 student_count 

表定义: courses (课程表)

列名类型注释
idint unsigned主键
namevarchar课程名称
student_countint学生总数
created_atdate课程创建时间
teacher_idint unsigned讲师 id

**

  • 查询返回列名需要与样例输出的列名大小写一致
  • 如果输入数据为空,则返回 NULL
  • 若一个教师有多节学生数的最大的课,则返回多节课

样例

样例 一

表内容: courses (课程表)

idnamestudent_countcreated_atteacher_id
1Senior Algorithm8802020-06-014
2System Design13502020-07-183
3Django7802020-02-293
4Web3402020-04-224
5Big Data7002020-09-111
6Java P6+16602018-05-133
7Java P6+7802019-01-193
8Data Analysis5002019-07-121
10Object Oriented Design3002020-08-084
12Dynamic Programming20002018-08-181

在运行你的 SQL 语句之后,表应返回:

namestudent_count
Advanced Algorithms880
Artificial Intelligence1660
Dynamic Programming2000

样例 二

表内容: courses (课程表)

idnamestudent_countcreated_atteacher_id
1Web8002019-8-93
2Database14402018-10-81
3cloud computing8502020-4-52
4C++9702020-5-284
5virtual reality9702020-11-214

在运行你的 SQL 语句之后,表应返回:

namestudent_count
Web800
Database1440
cloud computing850
C++970
virtual reality970

样例二中教师 id 为 4 的教师的两门课程学生数相等且最大,所以两门课都返回

题解

首先根据使用group by 按照老师进行分组。然后从分组中select出老师id和最大学生数量,然后根据教师id和学生数量在不在找到的分组中,获取到最终的数据。

select name,
student_count student_count
from courses
where (teacher_id,student_count) in(
select teacher_id,max(student_count) from courses group by teacher_id
)