【问题标题】:SQL joined tables are causing duplicatesSQL 连接表导致重复
【发布时间】:2020-10-30 09:33:52
【问题描述】:

所以表 A 是 policy_id 信息的整体表,而表 b 是 policy_id 的附加声明。并非 A 中的所有 id 都存在于 B 中,但我想加入这两个表并求和(总索赔)。

问题在于总和远高于表格本身的实际总和。

这是我迄今为止尝试过的:

select a.policy_id, coalesce(sum(b.claim_amt), 0)
from database.table1 as a
left join database2.table2 as b on a.policy_id = b.policy_id
where product_code = 'CI'
group by a.policy_id

在 b 中不存在的 id 显示得很好,旁边有一个 0,这是确实存在的那些 claim_amt 似乎在总和中被大量重复。

【问题讨论】:

  • policy_id是第一个表的主键吗?如果它在该表中不是唯一的,则可以预期数字会被重复计算。
  • 请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入作为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你期望的内容和原因。
  • 您在发帖时被告知要使用比“sql”更具体的 DBMS 标签。提供 DBMS 名称和版本。
  • 这似乎是一个常见的错误,人们想要一些连接,每个可能涉及不同的键,一些子查询,每个可能涉及连接和/或聚合,但他们错误地尝试完成所有连接然后全部聚合或聚合以前的聚合。在适当的行上编写单独的聚合和/或聚合一个案例语句选择行;加入一个独特的列集。有时 DISTINCT 聚合在非键连接后选择正确的值。 (对 2 个输入表中任一个的非键的连接可以为每个输入表的每个键提供多个输出行。)

标签: sql join duplicates


【解决方案1】:

我怀疑table1 中的policy_id 不是唯一的,这会导致翻倍、三倍等。金额 您可以在 CTE 中汇总来自 table2 的总和以解决此问题。

WITH CTE AS (
SELECT
  policy_id
  coalesce(sum(claim_amt), 0) as sum_amt
FROM database2.table2 
group by policy_id
)
select a.policy_id, b.sum_amt
from database.table1 as a
left join CTE as b on a.policy_id = b.policy_id
where product_code = 'CI'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 2013-02-25
    • 2011-01-04
    • 2011-06-29
    相关资源
    最近更新 更多