我想从三张不同的桌子里挑一张桌子。我设法计算了付费字段,但无法得到正确的收费值。
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;