Sql 如何让学生学业进步?
课程表Sql 如何让学生学业进步?,sql,sql-server,tsql,Sql,Sql Server,Tsql,课程表 course_code course_name credit_points_reqd 1 Comp Science 300 2 Soft Engineering 300 主题表 subject_code subject_name credit_points CS123 C Prog 15 CS124 COBOL 15 报名表 stu
course_code course_name credit_points_reqd
1 Comp Science 300
2 Soft Engineering 300
主题表
subject_code subject_name credit_points
CS123 C Prog 15
CS124 COBOL 15
报名表
student_id student_name course_code subject_code Results
1 Lara Croft 1 CS123 70
1 Lara Croft 1 CS124 50
2 Tom Raider 2 CS123 60
2 Tom Raider 2 CS124 40
3 James Bond 1 CS123 NULL
3 James Bond 1 CS124 40
输出表
student_name course_name credit_points_obt credit_points_reqd
Lara Croft Comp Science 30 300
Tom Raider Soft Engineering 15 300
我目前正在使用TSQL。情况是这样的。我准备了这些表格来获得输出,就像我在那里向你展示的那样。我需要计算获得的学分。如果学生所修科目的成绩超过50分,则可获得学分。我想忽略那些没有获得任何学分的学生(例如,詹姆斯·邦德因为没有获得任何学分而被忽略)
完全卡住了…我现在不知道该去哪里。你可以有条件地求和,以获得主题的分数。若并没有给出任何结果,那个么结果将为空,所以在having子句中过滤掉那个些学生/课程对 我已将>50条件更改为>=50,因为您的结果与您的要求相矛盾。另外,根据数据,我想说你省略了brewity的学生表,但如果你没有,那是必须的
介绍SQL的txFiddle@NikolaMarkovinović,requirment说,如果获得的分数超过50分,将获得学分,因此无需报名。结果>=50@zia如果我不得不引用自己的话:
我已经将>50条件改为>=50,因为你的结果与你的要求相矛盾
@Zia:更具体地说,当谈到结果时,尼古拉指的是OP输出中劳拉·克罗夫特的30
。因为,如果条件真的是>50
,她的结果应该是15
@AndriyM谢谢。我试图深入了解这一点,但我的英语不及格:-)
select student_name, course_name,credit_points_obt,credit_points_reqd
FROM enrolment (SELECT student_full_name, SUM(credit_points) AS credit_points_obt
FROM enrolment
GROUP BY student_id),
select enrolment.student_name,
course.course_name,
course.credit_points_reqd,
sum(case when enrolment.results >= 50
then subject.credit_points
end) credit_points_obt
FROM enrolment
inner join course
on enrolment.course_code = course.course_code
inner join subject
on enrolment.subject_code = subject.subject_code
group by enrolment.student_name,
course.course_name,
course.credit_points_reqd
having sum(case when enrolment.results >= 50
then subject.credit_points
end) is not null