繁体   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