Выбор ответа Senior SQL для продуктовых метрик обновлено
Первый заказ пользователя
Вопрос
Какой запрос вернёт по одной строке на пользователя с его первым заказом (всеми колонками)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: SELECT DISTINCT ON (userid) FROM orders ORDER BY userid, createddate, id;. DISTINCT ON в PostgreSQL оставляет первую строку каждой группы по порядку ORDER BY.
Варианты ответа
SELECT DISTINCT user_id, * FROM orders ORDER BY created_date;SELECT user_id, MIN(created_date), amount FROM orders GROUP BY user_id;SELECT DISTINCT ON (user_id) * FROM orders ORDER BY user_id, created_date, id;правильный ответSELECT * FROM orders ORDER BY user_id, created_date LIMIT 1;
Разбор
DISTINCT ON в PostgreSQL оставляет первую строку каждой группы по порядку ORDER BY. DISTINCT с * удаляет только полные дубли. GROUP BY с amount вне агрегата вызовет ошибку. LIMIT 1 вернёт один заказ на всю таблицу. Альтернатива DISTINCT ON: ROW_NUMBER в подзапросе.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «SQL для продуктовых метрик»
- Дни без событий
- Целочисленное деление
- COUNT после JOIN
- LAG
- Потерянный знаменатель
- Даты в PostgreSQL
- Нарастающий итог
- Как вы пишете метрический запрос