Условие
Таблица 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, что обычно не то, чего хотят на собеседовании.
Подводные камни
- Тай-брейк. Если 4-я категория имеет ту же сумму миль, что 3-я —
LIMIT 3отсечёт случайную из них. На интервью спрашивайте — нужен ли строгий top-3 или «top-3 ties included». Для последнего —DENSE_RANK() <= 3. - Считать строки vs мили. «Самые частые» можно интерпретировать двояко: по
COUNT(*)(число поездок) или поSUM(miles)(мили). По условию StrataScratch — мили. categorycase-sensitive. В Postgres'Business' ≠ 'business'. В MySQL обычно регистронезависимо для VARCHAR по умолчанию.LOWER(category) = 'business'— портативный вариант.
Эталонный ответ
WHERE category = 'Business' GROUP BY purpose ORDER BY SUM(miles) DESC LIMIT 3. Не забыть про NULL.