我正在解决一些问题,而且我似乎无法获得这个问题的预期结果。问题在于下面我现在的代码中的内容以及预期的结果。如果有人帮助那将是伟大的。我只是试图理解这一点,似乎无法理解这究竟是什么,因为你可以看到我现在的代码与现在的预期结果不相近。此外,我添加了架构,如果您的帮助需要,这将显示在什么表中。
问题:
列出课程的课程数量,其中学生已经获得了每种可能定义的年级类别的成绩。按课程编号排序。
到目前为止我的代码:
SELECT g.Student_id, g.Grade_type_code
FROM Grade g LEFT OUTER JOIN Section s
ON g.Section_id = s.Section_id
GROUP BY g.Student_id, g.Grade_type_code
ORDER BY g.Student_id;
任何帮助都会很棒,here is the Schema。
DBMS:我正在使用Oracle SQL Developer
这是预期结果
COURSE_NO
----------
20
25
100
120
122
125
130
135
注意:此问题的章节基于
LEFT OUTER JOIN
我目前的结果
STUDENT_ID GRADE_TYPE_CODE
---------- ---------------
102 FI
102 HM
102 MT
102 PA
102 QZ
103 FI
103 HM
103 MT
103 PA
103 QZ
104 FI
104 HM
答案 0 :(得分:1)
根据您的ER图表,我相信此查询应该返回一个课程列表,其中已注册的学生共同收到了GRADE_TYPE表中列出的所有成绩类型。
select s.course_no,
c.descr,
count(distinct g.grade_type_code) as num_grade_types
from grade g
join enrollment e
on g.student_id = e.student_id
and g.section_id = e.section_id
join section s
on e.section_id = s.section_id
join course c
on s.course_no = c.course_no
group by s.course_no, c.descr
having count(distinct g.grade_type_code) = (select count(grade_type_code)
from grade_type)
我没有注意到你的预期结果只是课程#(你可以从选择列表中删除你不想要的列)。此外,COURSE表的连接仅用于获取课程描述,因此如果您不希望选择课程描述,则不需要该连接。
答案 1 :(得分:0)
您需要选择COURSE_NO。并且还使用JOIN而不是LEFT JOUTER JOIN。
这样的事情:
从中选择COURSE_NO ( SELECT distinct(s.COURSE_NO) 来自Grade g JOIN Section s ON g.Section_id = s.Section_id ) ORDER BY s.COURSE_NO;