Собесов

StrataScratch (Uber) — топ-3 категорий по бизнес-милям

SQLTop-NЛёгкаяJunior

Условие

Таблица my_uber_drives(category, purpose, miles). Найдите 3 самых частых purpose-категории среди поездок с category = 'Business' по суммарному количеству миль.

Решение

SELECT
  purpose,
  SUM(miles) AS total_miles
FROM my_uber_drives
WHERE category = 'Business'
  AND purpose IS NOT NULL
GROUP BY purpose
ORDER BY total_miles DESC
LIMIT 3;

Почему purpose IS NOT NULL

В сыром датасете StrataScratch есть строки с purpose = NULL (приватные поездки без указания цели). GROUP BY с NULL объединит их в одну группу — и она может попасть в топ-3, что обычно не то, чего хотят на собеседовании.

Подводные камни

  1. Тай-брейк. Если 4-я категория имеет ту же сумму миль, что 3-я — LIMIT 3 отсечёт случайную из них. На интервью спрашивайте — нужен ли строгий top-3 или «top-3 ties included». Для последнего — DENSE_RANK() <= 3.
  2. Считать строки vs мили. «Самые частые» можно интерпретировать двояко: по COUNT(*) (число поездок) или по SUM(miles) (мили). По условию StrataScratch — мили.
  3. category case-sensitive. В Postgres 'Business' ≠ 'business'. В MySQL обычно регистронезависимо для VARCHAR по умолчанию. LOWER(category) = 'business' — портативный вариант.

Эталонный ответ

WHERE category = 'Business' GROUP BY purpose ORDER BY SUM(miles) DESC LIMIT 3. Не забыть про NULL.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти