gpt4 book ai didi

mysql - 在mysql中查找参加每门类(class)的学生的id

转载 作者:行者123 更新时间:2023-11-29 02:46:26 26 4
gpt4 key购买 nike

我有 3 个表:

Student (Id, Name, Country) 
Course (CrsCode, CrsName, Type, Instructor)
Results(Id, CrsCode, Grade)

我必须使用 SQL 查询来解决以下问题。 Id 和 CrsCode 是每个表中的关键字段。类型字段指定类(class)类型,例如MATH、STAT、SYSC、TTMG、ELEC等

  1. 找到参加 TTMG 或 SYSC 类(class)的学生的 ID。
  2. 找到参加每门类(class)的学生的 ID。
  3. 找出参加每门 TTMG 类(class)或每门 SYSC 类(class)的学生 ID。

下面是第 3 部分的示例数据。第一个图像是类(class)表,第二个图像是结果表

enter image description here

enter image description here

我可以使用以下 SQL 查询解决第一个问题:

SELECT R.ID FROM RESULTS R JOIN COURSE C ON C.CRSCODE = R.CRSCODE WHERE C. TYPE="TTMG"OR C.TYPE ='SYSC

对于第二个问题,我认为我们必须再次关联第二个(类(class))和第三个(结果)表以获得结果。这里不得不说一个具体的案例。 我们必须考虑这样一种情况,即有一个特定的学生正在修读所有类(class) (CrsCode),我们必须找到该学生的 ID

我相信查询仍然与问题 1 相同,但这次会有一些小的变化:

SELECT R.ID FROM RESULTS R JOIN COURSE C 

在类(class) C 之后我不包括任何内容,因为我不确定之后的答案。任何指针将不胜感激。

最佳答案

Find the Id of students who take every course.

假设类(class)表包含学生可以选修的所有类(class),您可以group by results 表中的 id 列并检查计数是否等于行在 course 表中计数。

SELECT ID
FROM RESULTS
GROUP BY ID
HAVING COUNT(DISTINCT CRSCODE) = (SELECT COUNT(*) FROM COURSE)

编辑:根据 OP 的评论

Find the id of students who take every TTMG or SYSC course

SELECT r.id
FROM course c
JOIN RESULTS r on c.CRSCODE=r.CRSCODE
GROUP BY r.ID
HAVING COUNT(case when type = 'SYSC' then r.CRSCODE end) = (SELECT COUNT(*) FROM COURSE WHERE type = 'SYSC')
OR COUNT(case when type = 'TTMG' then r.CRSCODE end) = (SELECT COUNT(*) FROM COURSE WHERE type = 'TTMG')

Sample Demo

关于mysql - 在mysql中查找参加每门类(class)的学生的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41528004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com