我想从三张不同的桌子里挑一张桌子。我设法计算了付费字段,但无法得到正确的收费值。

The Customer Table
    ╔════╦═════════════╗
    ║ ID ║    NAME     ║
    ╠════╬═════════════╣
    ║  1 ║ John Smith  ║
    ║  2 ║ Jim Jimmers ║
    ╚════╩═════════════╝
    The Event table
    ╔════╦═════════════╦═════════════╦═════════════╗
    ║ ID ║    Event    ║ Decription  ║    Fee      ║
    ╠════╬═════════════╬═════════════╬═════════════╣
    ║  1 ║ Rock Music  ║ Interseting ║          80 ║
    ║  2 ║ Pop music   ║ Interseting ║          90 ║
    ╚════╩═════════════╩═════════════╩═════════════╝


    The Payment table
    ╔════╦═════════════╦═════════════╦═════════════╗
    ║ ID ║already Paid ║ Customer_ID ║ Event_ID    ║
    ╠════╬═════════════╬═════════════╬═════════════╣
    ║  1 ║  0          ║           1 ║          1  ║
    ║  2 ║ 90          ║           1 ║          2  ║
    ║    ║             ║             ║             ║
    ║  3 ║ 90          ║           2 ║          2  ║
    ║  4 ║ 80          ║           2 ║          1  ║
    ╚════╩═════════════╩═════════════╩═════════════╝

我试着让这张桌子付款是指他已经支付了什么,费用是指他必须支付的事件
    ╔═══════╦══════════╦═══════╗
    ║Name   ║ paid     ║ Fee   ║
    ╠═══════╬══════════╬═══════╣
    ║John Sm║       90 ║  170  ║
    ║Jim Jim║      170 ║  170  ║
    ║       ║          ║       ║
    ║       ║          ║       ║
    ║       ║          ║       ║
    ║       ║          ║       ║
    ╚═══════╩══════════╩═══════╝

最佳答案

未测试:

select c.name, sum(p.paid), sum(e.fee)
  from customer c
  join payment  p on c.id       = p.customer_id
  join event    e on p.event_id = e.id
group by c.name;

10-06 03:10