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_fee
是 wc_doctor
中的一列。您想要在 wc_doctor
中每行求和一次。当您加入 wc_patient, the
consult_fee` 时,每位医生重复 每位患者,总和将累加所有重复项。
如果您真的想在包含患者的查询中包含医生的咨询费,您需要在子查询中单独聚合它,然后加入针对患者的结果。
有 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_fee
是 wc_doctor
中的一列。您想要在 wc_doctor
中每行求和一次。当您加入 wc_patient, the
consult_fee` 时,每位医生重复 每位患者,总和将累加所有重复项。
如果您真的想在包含患者的查询中包含医生的咨询费,您需要在子查询中单独聚合它,然后加入针对患者的结果。