【问题标题】:sql get students names who passed in all subjectssql获取所有科目及格的学生姓名
【发布时间】:2015-02-16 14:34:34
【问题描述】:

我有 3 张桌子

学生(身份证,姓名)

主题(ID,姓名)

student_subjects(student_id,subject_id,mark)

我想选择所有科目及格的学生姓名(所有科目得分>=50)

我试过了:

SELECT DISTINCT s.NAME
FROM STUDENT_SUBJECTS sb,
  STUDENTS s,
  SUBJECTS b
WHERE s.ID   = sb.STUDENT_ID
AND b.ID     = sb.SUBJECT_ID
AND sb.MARK >= 50

但这会得到任何科目大于或等于 50 的学生 有什么方法可以只获取通过所有科目的学生的姓名吗?

【问题讨论】:

  • 发布一个工作测试用例。这应该包括创建、插入语句以及所需的输出。没有人可以仅通过查看问题来重现您的问题。
  • 如果您想通过,最好在没有太多帮助的情况下完成作业。如果您只需要学生姓名,NOT EXISTS 可能会有所帮助。
  • SQL Fiddle 似乎已关闭,但是.. 您想计算按学生分组的 subject 和 student_subhects 行

标签: sql oracle oracle11g


【解决方案1】:

这应该可行:

SELECT s.NAME
FROM STUDENT_SUBJECTS sb,
  STUDENTS s,
  SUBJECTS b
WHERE s.ID   = sb.STUDENT_ID
AND b.ID     = sb.SUBJECT_ID
GROUP BY S.NAME
HAVING MIN(SB.MARK)>=50

如果存在两个同名的学生,也可以按 id 分组:

SELECT s.NAME
FROM STUDENT_SUBJECTS sb,
  STUDENTS s,
  SUBJECTS b
WHERE s.ID   = sb.STUDENT_ID
AND b.ID     = sb.SUBJECT_ID
GROUP BY S.ID,S.NAME
HAVING MIN(SB.MARK)>=50

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多