сначала вы должны присоединиться к своим таблицам и выбрать столбцы, необходимые для ваших расчетов:
SELECT Dname, Triprating, DDOB, TDate
FROM driver, booking
WHERE booking.driverID = driver.driverID;
возраст водителей немного сложен. В соответствии с https://stackoverflow.com/a/23824981/2331592 это может выглядеть так (при условии, что вы хотите указать возраст на момент бронирования)
TIMESTAMPDIFF(YEAR, TDate , DDOB)
также месяцы бронирования: я бы посоветовал также принять во внимание год, возможно, преобразовав его в '2019-06'
на
DATE_FORMAT(TDate ,'%Y-%m')
поэтому запрос теперь будет выглядеть как
SELECT Dname, TIMESTAMPDIFF(YEAR, TDate , DDOB) AS Dage, DATE_FORMAT(TDate ,'%Y-%m') AS Tmonth, Triprating
FROM driver, booking
WHERE booking.driverID = driver.driverID;
Теперь это таблица со всей информацией, и мы хотим сгруппировать некоторые вещи.
Для этого нам нужны агрегатные функции для полей, которые мы не хотим группировать.
Я использую предыдущий запрос в качестве подзапроса. Но это также можно сделать за один раз, но так будет понятнее.
SELECT Dname as driver,
MAX(Dage) as age,
Tmonth as month,
AVG(Triprating) as 'average rating'
FROM (SELECT Dname,
TIMESTAMPDIFF(YEAR, TDate , DDOB) AS Dage,
DATE_FORMAT(TDate ,"%Y-%m") AS Tmonth,
Triprating
FROM driver, booking
WHERE booking.driverID = driver.driverID
)
GROUP BY driver, month
ORDER BY driver ASC, month ASC;
с легкой адаптацией к SQLite
вышеуказанный SQL работает и может быть опробован на:
https://sqliteonline.com/#fiddle-5d04d5f898b5cmzxjwxfrdws
Edit:
, как предполагает Рохан Кумар в своем ответе, группирование данных бронирования может быть выполнено до объединения. это уменьшит количество строк для объединения и может быть немного быстрее и потреблять меньше ресурсов. Но в этом варианте возраст водителя во время бронирования не может быть рассчитан так просто.