Определите общую стоимость на пользователя из 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
также указан.