sql中的SUM和JOIN子句

时间:2015-10-01 15:11:47

标签: sql oracle oracle11g oracle-sqldeveloper

有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中的行为如何?

2 个答案:

答案 0 :(得分:2)

查询1和查询2是不同的。

  • 在第二个查询中,您SUM部门的每名医生检查一名患者需要多少费用。
  • 但在第一个中,你SUM所有病人都要向部门支付多少钱

答案 1 :(得分:1)

您需要了解连接在聚合之前发生,并且连接将在连接子表中的每一行的父表中复制值。

consult_feewc_doctor中的一列。您希望在wc_doctor中每行加一次。当您加入wc_patient, the consult_fee`时,每位医生都会重复每位患者,并且总和会累计所有重复。

如果您真的想在包含患者的查询中包含医生的咨询费,您需要在子查询中单独汇总,然后将该结果与患者联系起来。