[英]Nested SQL Statement not figuring SUM as expected
我正在嘗試執行快速記帳sql語句,但遇到了一些問題。
我有3個表格注冊,事件和一個付款表格。 注冊是個人交易,事件是有關他們注冊的信息,付款是對事件的付款。
我想總計注冊所支付的金額,將事件名稱和事件開始日期放入一欄中,然后總計到目前為止已支付的金額。 如果可能的話,我也想找到一個未付的總額。 我相信最下面的數字會顯示除付款總額以外的所有內容。 付款總金額比其應有的要大得多,由於使用嵌套,因此使用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的猜測,但是它應該使您走上正確的道路。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.