sql - 如何避免左表中主键在连接表中不唯一的重复
问题描述
我在加入 2 个表时遇到了 SUM 问题,主键在左表中是唯一的,但可以在右表中重复。我的情况是,一个 case_id 可能在左表中支付了例如 100 英镑的款项,然后在右表中将其细分为 2 英镑的 50 英镑付款。这导致在加入时左表支付被计算两次,因为 case_id 在右表中存在两次。
我已经尝试了许多不同的查询变体,但到目前为止都没有成功。我也搜索过这个网站,但一直找不到适合我的场景。
select distinct
t1.[r_code],
t1.[parent_case_id],
sum(t1.[total_redress_value]),
sum(t2.[payment_amount])
from
[SomeTable1] t1
left join
[SomeTable2] t2 on t1.[case_id] = t2.[case_id]
group by
t1.[r_code], t1.[parent_case_id]
期望 total_redress_value 和 payment_amount 的 SUM 各为 100,但是由于连接中重复的 case_id 行,我发现 total_redress_value 的 SUM 为 200。非常感谢任何帮助。
解决方案
按左边的 PK 对右边的桌子进行分组。
SELECT DISTINCT
t1.[r_code],
t1.[parent_case_id],
SUM(t1.[total_redress_value]),
SUM(t2.[payment_amount])
FROM [SomeTable1] t1
LEFT JOIN
(
SELECT case_id,
MIN(payment_amount) AS payment_amount --or sum etc - whatever fits your logic
FROM [SomeTable2]
GROUP BY case_id
) AS t2
ON t1.[case_id] = t2.[case_id]
GROUP BY t1.[r_code],
t1.[parent_case_id];
推荐阅读
- reactjs - 向 woocomerce wordpress 商店添加更多产品后,graphql 失败
- where-clause - 两个相同的查询,一个带有 SQL 参数,另一个带有硬编码字符串值,提供不同的结果集
- android - Detekt 版本 1.18.0 与 Gradle 7.1.1、AGP 版本 7.0.0 和 jdk 11 及更高版本不兼容
- angular - 在后端/数据库中获取特定 id
- python - 从邮递员那里设置 GOOGLE_APPLICATION_CREDENTIALS
- regex - 在动态日志中找到“错误”字符串之前如何选择?正则表达式
- python - 如何使用耦合 ODE 实现射击方法
- tensorflow - 使用 LPOT 量化模型时出错
- c - Contiki os中对clock_gettime的未定义引用
- anaconda - Jupyter 笔记本没有在 Ananconda 中打开