sql 中的 SUM 和 JOIN 子句

SUM and JOIN clause in sql

有 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 列在查询 1 中的表现如何?

嗯,query1 和 query2 是不同的。

  • 在第二个查询中,您是SUM科室每位医生检查单个患者的费用。
  • 但是在第一个中你是SUM所有病人都付给部门多少钱

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

consult_feewc_doctor 中的一列。您想要在 wc_doctor 中每行求和一次。当您加入 wc_patient, theconsult_fee` 时,每位医生重复 每位患者,总和将累加所有重复项。

如果您真的想在包含患者的查询中包含医生的咨询费,您需要在子查询中单独聚合它,然后加入针对患者的结果。