gpt4 book ai didi

mysql - 联接表的唯一行的总和

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:35 25 4
gpt4 key购买 nike

我有 3 个表。 实践调整声明
我需要选择所有带有附加列 adjustments.amount + count(claims.id)

的做法

这是我的查询。

SELECT 
practices.*,
(
SUM(adjustments.amount) + count(claims.id)
) as accurred_fees
INNER JOIN adjustments ON adjustments.practice_id = practices.id
INNER JOIN claims ON claims.practice_id = practices.id
GROUP BY practices.id

在我的数据库中,我有 1 项实践、20 项 claim 和 1 项调整,金额等于 2。查询中的 SUM(eligible_fee_adjustments.amount) 总是返回 40,我猜它是 2 * count(claims.id),我不知道为什么会这样。你能帮我找到解决办法吗?提前致谢

最佳答案

您遇到了沿两个不同维度连接的问题,因此行数成倍增加。您可以通过预先聚合数据来解决此问题。以下内容将解决此特定问题:

SELECT p.*,
(SUM(a.amount) + c.cnt) as accurred_fees
FROM practices p INNER JOIN
adjustments a
ON a.practice_id = p.id INNER JOIN
(SELECT practice_id, count(*) as cnt
FROM claims c
GROUP BY practice_id
) c
ON c.practice_id = p.id
GROUP BY p.id;

您可能还应该预聚合调整:

SELECT p.*,
(a.amount + c.cnt) as accurred_fees
FROM practices p INNER JOIN
(SELECT practice_id, SUM(amount) as amount
FROM adjustments a
GROUP BY practice_id
) a
ON a.practice_id = p.id INNER JOIN
(SELECT practice_id, count(*) as cnt
FROM claims c
GROUP BY practice_id
) c
ON c.practice_id = p.id
GROUP BY p.id;

而且您可能想要考虑 LEFT OUTER JOIN 而不是 INNER JOIN 这样您就可以获得所有实践,即使是那些可能缺少调整或声明的实践。

关于mysql - 联接表的唯一行的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com