Загрузка данных


Алина мяумяу:
-- Считаем общую сумму завершенных поездок для каждого водителя и выводим топ-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;