晚安,
目标是知道我的mysql表中所有偏移的总和。
我的sql表就是这样。
Excursion
ID Excursion_Name Excursion_date Excursion_capacity
1 Exc1 date 1 10
2 Exc2 date 1 15
这里的日期1是游览出发日期(我写日期1只是为了表明两次短途旅行都在同一天)
Booking
Id Excursion_id
1 1
2 1
预订是保存所有预订的表格。
Booking_price
booking_id price_id quantity
1 1 2
1 2 0
Booking_price是因为我们有不同的价格,如成人,儿童等
我们还有一个名为“价格”的表,其中存储了有关价格的所有信息,并参考了游览。
我只想得到那种表格。
Excursion_id free_tickets(booked_tickets - capacity)
1 8
2 15
感谢大家!
答案 0 :(得分:0)
以这种方式试试
SELECT e.id excursion_id,
e.excursion_capacity - COALESCE(q.quantity, 0) free_tickets
FROM excursion e LEFT JOIN
(
SELECT b.excursion_id, SUM(p.quantity) quantity
FROM booking b JOIN booking_price p
ON b.id = p.booking_id
GROUP BY b.excursion_id
) q
ON e.id = q.excursion_id
或
SELECT e.id excursion_id,
MAX(e.excursion_capacity) - COALESCE(SUM(p.quantity), 0) free_tickets
FROM excursion e LEFT JOIN booking b
ON e.id = b.excursion_id LEFT JOIN booking_price p
ON b.id = p.booking_id
GROUP BY e.id
输出:
| EXCURSION_ID | FREE_TICKETS | |--------------|--------------| | 1 | 8 | | 2 | 15 |
以下是两个查询的 SQLFiddle 演示
答案 1 :(得分:0)
SELECT
e.Id,
e.Excursion_capacity - SUM(ifnull(bp.Quantity,0)) AS free_tickets
FROM
Excursion e
LEFT JOIN
Booking b on e.Id = b.Excursion_id
LEFT JOIN
Booking_price bp on b.id = bp.Booking_id
GROUP BY
e.Id