与客户和短途旅行的mysql中的SUM

时间:2013-12-11 21:43:31

标签: mysql sql

晚安,

目标是知道我的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

感谢大家!

2 个答案:

答案 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