Алина мяумяу:
-- Считаем общую сумму завершенных поездок для каждого водителя и выводим топ-5
SELECT
d.full_name AS "Водитель",
d.car_model AS "Автомобиль",
SUM(r.total_price) AS "Общая выручка",
COUNT(r.id) AS "Всего поездок"
FROM drivers d
JOIN rides r ON d.id = r.driver_id
WHERE r.status = 'completed'
GROUP BY d.id, d.full_name, d.car_model
ORDER BY "Общая выручка" DESC
LIMIT 5;
-- Находим всех клиентов, которые зарегистрировались, но ни разу не воспользовались сервисом
SELECT
c.full_name,
c.phone,
c.registration_date
FROM clients c
LEFT JOIN rides r ON c.id = r.client_id
WHERE r.id IS NULL
ORDER BY c.registration_date DESC;
-- Группируем поездки по времени начала, чтобы выявить часы самого высокого спроса
SELECT
EXTRACT(HOUR FROM start_time) AS "Час заказа",
COUNT(*) AS "Количество поездок"
FROM rides
GROUP BY "Час заказа"
ORDER BY "Количество поездок" DESC;
-- Сначала находим клиентов со средним чеком > 1000, затем определяем их любимый тариф
WITH WealthyClients AS (
SELECT client_id
FROM rides
GROUP BY client_id
HAVING AVG(total_price) > 1000
)
SELECT
t.name AS "Любимый тариф",
COUNT(r.id) AS "Кол-во поездок"
FROM rides r
JOIN tariffs t ON r.tariff_id = t.id
WHERE r.client_id IN (SELECT client_id FROM WealthyClients)
GROUP BY t.name
ORDER BY "Кол-во поездок" DESC
LIMIT 1;
-- Выясняем, какие марки машин приносят больше всего выручки и какой у них средний рейтинг
SELECT
d.car_model AS "Модель авто",
COUNT(r.id) AS "Кол-во поездок",
ROUND(AVG(d.rating), 2) AS "Средний рейтинг",
SUM(r.total_price) AS "Общая выручка"
FROM drivers d
JOIN rides r ON d.id = r.driver_id
WHERE r.status = 'completed'
GROUP BY d.car_model
ORDER BY "Общая выручка" DESC;