Войти Регистрация
Data base

1. Купили и ноутбук, и монитор

Лёгкая

Три таблицы магазина: customers, products, purchases. Найдите покупателей, которые в марте 2025 года купили и ноутбук, и монитор (products.name = 'Ноутбук' и 'Монитор').

Обе покупки должны попасть в март; порядок и число штук не важны. Верните customer_id, full_name, строки — по customer_id.

В работе: Подбор аудитории для кросс-продажи: кто собирает рабочее место и может взять рассрочку на кресло.

Таблицы

customers — покупатели

КолонкаТипЧто значит
customer_idintключ
full_nametextимя
ageintвозраст, лет
citytextгород

products — справочник товаров

КолонкаТипЧто значит
product_idintключ
nametextназвание: Ноутбук, Монитор, Мышь, Смарт-часы

purchases — одна строка — одна покупка

КолонкаТипЧто значит
purchase_idintключ
customer_idintпокупатель
product_idintтовар
purchased_attimestampвремя покупки
price_rubnumericцена, ₽

Пример: данные

customers · 3 строки

customer_idfull_nameagecity
1Анна Соколова29Москва
2Игорь Петров41Тула
3Мария Ким35Казань

products · 4 строки

product_idname
1Ноутбук
2Монитор
3Мышь
4Смарт-часы

purchases · 5 строк

purchase_idcustomer_idproduct_idpurchased_atprice_rub
1112025-03-05T12:10:0089990
2122025-03-12T18:00:0021990
3212025-03-07T10:00:0074990
4322025-03-10T11:30:0018990
5312025-04-02T09:15:0092990

Ожидаемый ответ

customer_idfull_name
1Анна Соколова
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
customer_id, full_name
JOINGROUP BYHAVINGDISTINCTдаты

Источник: разбор SQL-интервью в Альфа-Банк на Хабре, 2024. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.