Выбор ответа Senior SQL для продуктовых метрик обновлено

Первый заказ пользователя

Вопрос

Какой запрос вернёт по одной строке на пользователя с его первым заказом (всеми колонками)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: SELECT DISTINCT ON (userid) FROM orders ORDER BY userid, createddate, id;. DISTINCT ON в PostgreSQL оставляет первую строку каждой группы по порядку ORDER BY.

Варианты ответа

  1. SELECT DISTINCT user_id, * FROM orders ORDER BY created_date;
  2. SELECT user_id, MIN(created_date), amount FROM orders GROUP BY user_id;
  3. SELECT DISTINCT ON (user_id) * FROM orders ORDER BY user_id, created_date, id;правильный ответ
  4. 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 ошибок.