簡體   English   中英

嵌套的SQL語句未按預期計算SUM

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM