You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:查询同一学期授课≥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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:51:53