SQLJOINEasyБесплатно

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

// Условие

Найдите пользователей, которые зарегистрировались, но не сделали ни одного заказа. Выведите user_id, registration_date и city. Отсортируйте по registration_date.

// Таблицы

sandbox.users
user_idINT
registration_dateDATE
acquisition_channelVARCHAR(20)
platformVARCHAR(10)
cityVARCHAR(50)
is_premiumBOOLEAN
sandbox.orders
order_idINT
user_idINT
order_dateTIMESTAMP
amountNUMERIC(10,2)
statusVARCHAR(20)
delivery_daysINT
promo_codeVARCHAR(20)

// Что тренирует

LEFT JOINIS NULLNOT EXISTS
▶ Решить в SQL-песочнице

// Решение

Подсказка

LEFT JOIN users → orders, затем WHERE o.order_id IS NULL. Или подзапрос с NOT IN / NOT EXISTS.

Сначала попробуй сам → Показать решение
SELECT
  u.user_id,
  u.registration_date,
  u.city
FROM sandbox.users u
LEFT JOIN sandbox.orders o ON u.user_id = o.user_id
WHERE o.order_id IS NULL
ORDER BY u.registration_date;

Классический паттерн «найти то, чего нет» через LEFT JOIN + IS NULL. Альтернативы: WHERE u.user_id NOT IN (SELECT user_id FROM orders) или WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.user_id). Все три варианта корректны. На практике LEFT JOIN + IS NULL часто самый читаемый.

// Похожие задачи

// Разобраться в теме

→ Типы JOIN в SQL