我有一个正确返回三列的查询。我无法弄清楚如何仅使用LEFT JOIN的结果添加SUM()数据的frouth列。
以下是返回正确三列的原始查询:
select TITLES.NAME, COUNT(progskills.skill_no) as B, COUNT(ss.skill_no) as A, SUM(ss.score) as C FROM TITLES inner join progskills on progskills.program_no = titles.title_no left join STUSKILLS ss on progskills.SKILL_NO = ss.skill_no and ss.STUDENT_NO = '1234' where progskills.program_no in (select progskills.program_no from PROGSKILLS, STUSKILLS where progskills.SKILL_NO = stuskills.SKILL_NO and stuskills.SCORE != 0 and stuskills.STUDENT_NO = '1234') group by titles.name
正确返回以下结果:
B A C Database Administration 4 1 50 Implementation Specialist 4 1 50 Office Manager 4 2 130 Registrar 4 2 130 Scheduler 4 3 130 Scheduling Assistant 2 1 50 Support Systems Manager 4 2 130
在第四列中,我要做的是根据STUSKILLS上左连接的结果从PROGSKILLS表中SUM一个名为MINSCORE的列。换句话说,我只想对左连接引用的那些元素求和。
我尝试了很多次尝试,但似乎所有尝试都失败了,或者导致其他数据列结果成倍增加。
我最好的猜测是将以下内容添加到我的主要SELECT子句......
SUM(select ps.minscore from PROGSKILLS ps where ps.SKILL_NO = ss.skill_no) as D
但是SQL抱怨SUM(SELECT是语法错误而且ss.skill_no不能绑定。
我知道SUM(SELECT是可以接受的。
我意识到这是一个非常复杂的查询,但我希望有人可以帮助我弄清楚如何根据“A”列中计算的元素从PROGSKILLS获取数据。
事先......谢谢!
答案 0 :(得分:4)
你试过这个:?
sum(case when ss.skill_no is null then 0 else progskills.MINSCORE end) as D