Определите общую стоимость на пользователя из 3 разных таблиц

Я работаю над системой бронирования театра в MySql (мой первый проект SQL). У меня есть три таблицы:

Production (contains Title, BasicTicketPrice), 
Performance (PerformanceDate, PerformanceTime, Title) 
Booking (Email of person who booked, PerformanceDate, PerformanceTime, RowNumber). 

Каждый человек забронировал билеты на два или три спектакля (используя электронную почту для бронирования).

Мне нужно написать запрос, в котором будут отображаться цены, уплаченные за все забронированные места, и мне нужно вывести RowNumber, E-mail человека, который забронировал номер, и Расчетную цену.

Я понимаю, что мне нужно присоединиться к этим таблицам и сделать так, чтобы в запросе отображался временный столбец "Расчетная цена", но я не знаю, как рассчитать цену.

Я попробовал это:

SELECT DISTINCT b.RowNumber, b.Email, pr.BasicTicketPrice 
FROM booking b, production pr performance p
WHERE p.Title=b.PerfDate*b.PerfTime*b.RowNumber;

SELECT CONCAT (PerfDate, PerfTime, RowNumber) AS BookingID FROM booking;

SELECT RowNumber, Email, CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID FROM booking;

SELECT RowNumber, Email, CONCAT((CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID 
   FROM booking)BasicTicketPrice*BookingID);

SELECT RowNumber, Email, CONCAT(PerfDate, PerfTime, RowNumber) AS BookingID INTEGER 
FROM booking;

SELECT RowNumber FROM booking
LEFT JOIN (SELECT Title FROM performance WHERE '2017-11-01 19:00:00' Email IS NULL);

Но это не сработало.

Какие-либо предложения? Буду благодарен за любые идеи.

1 ответ

Решение

Предполагая, что:

  • Один ряд в бронировании за забронированное место
  • Title быть подходящим первичным ключом для Production
  • PerformanceDate, PerformanceTime быть подходящим первичным составным ключом для Performance

Вы будете пытаться соединить три таблицы вместе, как указано выше. Кажется, вы хотите сгруппировать заказы по количеству выступлений по человеку, который заказывает билеты - если это так, вам нужно использовать агрегат для отображения номеров мест (я использовал GROUP_CONCAT разграничить их), а также COUNT билеты куплены и умножаются на стоимость билета.

SELECT 
   b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, 
   GROUP_CONCAT(RowNumber) AS BookedSeats, 
   COUNT(RowNumber) * prod.BasicTicketPrice AS TotalCost
FROM Booking b
INNER JOIN Performance per  
     ON b.PerformanceDate = per.PerformanceDate 
        AND b.PerformanceTime = per.PerformanceTime
INNER JOIN Production prod
     ON per.Title = prod.Title
GROUP BY 
   b.Email, prod.Title, per.PerformanceDate, per.PerformanceTime, prod.BasicTicketPrice
ORDER BY prod.Title, per.PerformanceDate, per.PerformanceTime;

Технически, мы должны включить все неагрегированные столбцы в GROUP BYотсюда prod.BasicTicketPrice также указан.

Другие вопросы по тегам