gpt4 book ai didi

mysql - 嵌套 SQL 语句未按预期计算 SUM

转载 作者:行者123 更新时间:2023-11-29 06:50:28 25 4
gpt4 key购买 nike

我正在尝试做一个快速的会计 sql 语句,但遇到了一些问题。

我有 3 个表 registrations、events 和一个 payments 表。注册是个人交易,事件是关于他们注册的内容的信息,付款是对事件的付款。

我想合计注册支付的金额,将事件名称和事件开始日期放入一列,然后合计到目前为止支付的金额。如果可能的话我还想找到一个未支付的总额。我相信底部会计算出除付款总额之外的所有内容。付款总额比应有的大得多,使用 SUM 很可能因为嵌套而多次计算付款。

select 
sum(`reg_amount`) as total,
event_name,
event_startdate,
(
select sum(payment_amount) as paid
from registrations
group by events.event_id
) pay
FROM registrations
left join events
on events.event_id = registrations.event_id
left join payments
on payments.event_id = events.event_id
group by registrations.event_id

最佳答案

首先,您应该使用别名,以便我们知道所有字段的来源。我猜测 payment_amount 来自 payments 表,而不是来自 registrations

如果是这样,您的子查询将为注册中的每一行添加来自外部 表的付款。可能不是您想要的。

我想你想要这样的东西:

select sum(`reg_amount`) as total, 
e.event_name,
e.event_startdate,
p.TotPayements
FROM registrations r left join
events e
on e.event_id = r.event_id left join
(select event_id, sum(payment_amount) as TotPayments
from payments
group by event_id
) p
on p.event_id = e.event_id
group by r.event_id;

我们的想法是在尽可能低的级别汇总付款,以避免因加入而导致的重复。也就是说,加入之前聚合。

这是对正确 SQL 的猜测,但它应该会让您走上正确的道路。

关于mysql - 嵌套 SQL 语句未按预期计算 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15770600/

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