【问题标题】:SUM and JOIN clause in sqlsql中的SUM和JOIN子句
【发布时间】:2015-10-01 15:11:46
【问题描述】:

有 3 个表格,各列:
wc_dept:dept_id,dept_name
wc_doctor : dept_id,doc_id,doc_name,consult_fee
wc_patient: doc_id,consult_id,患者姓名

对于以下查询,我得到了不同的结果:

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

【问题讨论】:

  • 了解如何使用明确的join 语法。这将帮助您跟踪您的加入条件。
  • Aaron Bertrand 对此做了一些writting
  • 您是否尝试从每个查询中删除 sum 和 group bys 并查看返回的行的差异?您在第一个查询中加入了一个额外的表,所以我希望在第一个查询中看到更多的行,因此总和更大。
  • 鉴于您没有提供任何样本数据,这是我能看到的唯一结论。我猜一个给定的医生会看到多个病人!您要解决的实际需求是什么?我会说第一个查询比第二个查询具有更多的实际意义-我的意思是,为什么您需要知道每个医生每个部门的咨询费总和?了解每个部门看病的费用肯定更有意义吗?
  • 我没有投反对票,但我猜有些人对问题的编写方式感到不满。请阅读How to ask 以获得一些建议。因此,当您未能提供一些数据样本时,这可能被认为是一个不完整的问题。

标签: sql oracle oracle11g oracle-sqldeveloper


【解决方案1】:

那么 query1 和 query2 是不同的。

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

【讨论】:

  • 也许你想看一些tutorial我从他那里学习asp和mvc,我更喜欢听和看而不是阅读。 JOIN 是视频#12
【解决方案2】:

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

consult_feewc_doctor 中的一列。您想在wc_doctor 中每行求和一次。当您加入wc_patient, theconsult_fee` 时,每位医生都会重复每位患者,并且总和会超过所有重复次数。

如果您真的想在包含患者的查询中包含医生的咨询费,您需要在子查询中单独聚合它,然后将该结果与患者相结合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多