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

如何检索所有学生均获满分(6分)的教师全名?

检索所有学生均得满分的教师姓名的SQL解决方案

需求:从Students、Teachers、Scores三张数据表中,筛选出所有学生均取得满分(6分)的教师全名(预期结果为NameB)。原查询仅在符合条件的教师唯一时偶然有效,多符合条件教师时失效,以下是正确的SQL解决方案。

原查询问题分析

你使用的原查询逻辑存在根本错误:将student_id与子查询返回的满分次数(此处均为1)做匹配,纯属巧合命中结果,无法覆盖多教师符合条件的场景,完全不符合需求逻辑。

正确解决方案

方法一:分组统计对比法

通过分组统计每个教师的学生总数和满分学生数,判断两者是否相等来筛选目标教师:

SELECT t.full_name
FROM Students s
JOIN Scores sc ON s.student_id = sc.student_id
JOIN Teachers t ON s.teacher_id = t.teacher_id
GROUP BY t.teacher_id, t.full_name
HAVING COUNT(DISTINCT s.student_id) = SUM(CASE WHEN sc.score = 6 THEN 1 ELSE 0 END);
  • 逻辑说明:按教师分组后,COUNT(DISTINCT s.student_id)统计该教师的总学生数,SUM(CASE...)统计该教师下属满分学生的数量,两者相等则说明所有学生均为满分。

方法二:NOT EXISTS排除法

通过排除存在非满分学生的教师,得到所有学生均满分的教师:

SELECT t.full_name
FROM Teachers t
WHERE NOT EXISTS (
    SELECT 1
    FROM Students s
    JOIN Scores sc ON s.student_id = sc.student_id
    WHERE s.teacher_id = t.teacher_id
      AND sc.score != 6
);
  • 逻辑说明:对每个教师,检查是否存在其下属学生分数不等于6的情况,若不存在则该教师所有学生均为满分,纳入结果集。

两种方案均支持多个符合条件的教师场景,在给定测试数据中均会返回NameB。

内容的提问来源于stack exchange,提问作者ciconq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:45:29