请求协助:查询同一学期授课≥2门的教授唯一ID(SQL作业)
解决“查询同一学期授课不少于2门的教授唯一ID”的SQL问题
我太懂这种试了N种写法却一直出错误结果的挫败感了!咱们先把问题拆解清楚,看看你可能漏掉的关键细节。
首先明确你的核心需求:
查询所有在同一学期授课不少于2门的教授的唯一ID。
再看你给出的教授表结构(我帮你补全了未写完的主键定义):
DROP TABLE IF EXISTS PROFESSOR; CREATE TABLE PROFESSOR ( Id VARCHAR (9), Name VARCHAR (32), DepartmentId VARCHAR (3), PRIMARY KEY (Id) );
第一个关键问题:你大概率漏了关联的授课表!
PROFESSOR表只存储教授的基本信息,根本没有学期和授课课程的相关数据呀!要统计教授在某一学期的授课数量,必须要有一个类似TEACHING或者COURSE_ASSIGNMENT的关联表,结构大概是这样(你可以根据实际表名/字段名调整):
-- 假设的授课表,用来记录教授、学期和对应的课程 CREATE TABLE TEACHING ( ProfessorId VARCHAR(9), -- 和PROFESSOR.Id关联 Semester VARCHAR(10), -- 比如'2024_FALL'或者'2024春' CourseId VARCHAR(10), -- 课程ID PRIMARY KEY (ProfessorId, Semester, CourseId) -- 避免同一教授同一学期重复记录同一门课 );
正确的SQL查询写法
有了授课表之后,我们可以通过分组+聚合函数来实现需求:
写法1:关联教授表,返回教授的唯一ID
SELECT DISTINCT p.Id AS ProfessorId FROM PROFESSOR p INNER JOIN TEACHING t ON p.Id = t.ProfessorId -- 必须同时按教授ID和学期分组,确保统计的是同一学期的授课数 GROUP BY p.Id, t.Semester -- 筛选出同一学期授课数≥2的记录 HAVING COUNT(t.CourseId) >= 2;
写法2:直接从授课表查询(如果不需要教授表的其他信息)
SELECT t.ProfessorId AS ProfessorId FROM TEACHING t GROUP BY t.ProfessorId, t.Semester -- 如果授课表可能有重复记录,用COUNT(DISTINCT CourseId)避免统计重复 HAVING COUNT(DISTINCT t.CourseId) >= 2;
你可能踩的坑
- 没关联授课表:这是最常见的错误,只靠PROFESSOR表根本没法统计授课数量。
- 分组逻辑错误:只按教授ID分组,会把该教授所有学期的授课数加总,而不是统计单个学期的数量。
- 没处理重复记录:如果授课表中存在同一教授同一学期同一课程的重复行,一定要用
COUNT(DISTINCT CourseId)来保证统计的是不同课程的数量。 - 主键定义不完整:你给出的PROFESSOR表主键没写完,确保主键是
Id,不然可能影响关联查询。
如果你的实际表结构和我假设的不一样(比如授课表叫COURSE,字段名是InstructorId),只需要把对应的表名和字段名替换掉就行啦!
内容的提问来源于stack exchange,提问作者TWangmo
相关产品推荐
相关产品推荐

