我有一个返回错误结果的查询:
select sum(count(distinct stcr1.sfrstcr_pidm)) as sum_all
from saturn.sfrstcr stcr1
inner join saturn.sfrstcr stcr2
on stcr1.sfrstcr_pidm = stcr2.sfrstcr_pidm
where stcr1.sfrstcr_term_code = '200808'
and stcr2.sfrstcr_term_code = '200908'
group by stcr1.sfrstcr_pidm
having sum(stcr1.sfrstcr_credit_hr) >= 12
我希望查询能够为stcr1.sfrstcr_pidm
提供总数stcr1.sfrstcr_credit_hr
至少为12的stcr2
,并显示在saturn.sfrstcr
中。虽然sfrstcr_pidm
中的每条记录都是唯一的,但stcr1.sfrstcr_credit_hr
的列中可以包含任意数量的重复条目。
但是,查询会为stcr2.sfrstcr_pidm
的每个实例获取stcr1.sfrstcr_credit_hr
的总和。因此,例如,如果stcr2.sfrstcr_pidm
的总和实际为6,但有两个stcr1.sfrstcr_pidm
实例加入stcr1.sfrstcr_pidm
,则查询得到12的总和,并错误地添加having sum(stcr1.sfrstcr_credit_hr) >= 12
结果。至少我认为会发生什么。
如果我更换
having (select sum(stcr3.sfrstcr_credit_hr)
from saturn.sfrstcr stcr3
where stcr1.sfrstcr_pidm = stcr3.sfrstcr_pidm
and stcr3.sfrstcr_term_code = '200808') >= 12
与
{{1}}
我得到了正确的结果,但似乎应该有更好的方法来执行此操作,而不会在having子句中涉及子查询。有什么建议吗?
答案 0 :(得分:1)
"我希望查询给出stcr1.sfrstcr_pidm的数量,其总stcr1.sfrstcr_credit_hr至少为12,并且存在于stcr2中。"
如果我没有错过这个问题的一些细微差别,这似乎是一个相当直接的方法:
select count(distinct sfrstcr_pidm)
from
(
select sfrstcr_pidm
from saturn.sfrstcr
where sfrstcr_term_code = '200808'
and sfrstcr_pidm in
(select sfrstcr_pidm
from saturn.sfrstcr
where sfrstcr_term_code = '200809')
group by sfrstcr_pidm
having sum(sfrstcr_credit_hr) >= 12
)