有3个表格各有一列:
wc_dept:dept_id,dept_name
wc_doctor:dept_id,doc_id,doc_name,consult_fee
wc_patient:doc_id,consult_id,patient_name
对于以下查询,我得到的结果不同:
查询1:
select dept_name,sum(consult_fee)
from wc_doctor do,wc_dept dp,wc_patient p
where
do.dept_cd=dp.dept_cd
AND
do.doc_id=p.doc_id
group by dept_name;
上述查询的输出是每个部门与实际金额相比非常大的金额,即每个部门的咨询费总和。
查询2:
select dept_name,sum(consult_fee)
from wc_doctor do,wc_dept dp
where
do.dept_cd=dp.dept_cd
group by dept_name;
查询2的输出给出了每个部门的咨询费的确切总和。
为什么query1和query2之间存在差异? consult_id列在query1中的行为如何?
答案 0 :(得分:2)
查询1和查询2是不同的。
SUM
部门的每名医生检查一名患者需要多少费用。SUM
所有病人都要向部门支付多少钱答案 1 :(得分:1)
您需要了解连接在聚合之前发生,并且连接将在连接子表中的每一行的父表中复制值。
consult_fee
是wc_doctor
中的一列。您希望在wc_doctor
中每行加一次。当您加入wc_patient, the
consult_fee`时,每位医生都会重复每位患者,并且总和会累计所有重复。
如果您真的想在包含患者的查询中包含医生的咨询费,您需要在子查询中单独汇总,然后将该结果与患者联系起来。