Три таблицы магазина: customers, products, purchases. Найдите покупателей, которые в марте 2025 года купили и ноутбук, и монитор (products.name = 'Ноутбук' и 'Монитор').
Обе покупки должны попасть в март; порядок и число штук не важны. Верните customer_id, full_name, строки — по customer_id.
В работе: Подбор аудитории для кросс-продажи: кто собирает рабочее место и может взять рассрочку на кресло.
Таблицы
customers — покупатели
| Колонка | Тип | Что значит |
|---|---|---|
customer_id | int | ключ |
full_name | text | имя |
age | int | возраст, лет |
city | text | город |
products — справочник товаров
| Колонка | Тип | Что значит |
|---|---|---|
product_id | int | ключ |
name | text | название: Ноутбук, Монитор, Мышь, Смарт-часы |
purchases — одна строка — одна покупка
| Колонка | Тип | Что значит |
|---|---|---|
purchase_id | int | ключ |
customer_id | int | покупатель |
product_id | int | товар |
purchased_at | timestamp | время покупки |
price_rub | numeric | цена, ₽ |
Пример: данные
customers · 3 строки
| customer_id | full_name | age | city |
|---|---|---|---|
| 1 | Анна Соколова | 29 | Москва |
| 2 | Игорь Петров | 41 | Тула |
| 3 | Мария Ким | 35 | Казань |
products · 4 строки
| product_id | name |
|---|---|
| 1 | Ноутбук |
| 2 | Монитор |
| 3 | Мышь |
| 4 | Смарт-часы |
purchases · 5 строк
| purchase_id | customer_id | product_id | purchased_at | price_rub |
|---|---|---|---|---|
| 1 | 1 | 1 | 2025-03-05T12:10:00 | 89990 |
| 2 | 1 | 2 | 2025-03-12T18:00:00 | 21990 |
| 3 | 2 | 1 | 2025-03-07T10:00:00 | 74990 |
| 4 | 3 | 2 | 2025-03-10T11:30:00 | 18990 |
| 5 | 3 | 1 | 2025-04-02T09:15:00 | 92990 |
Ожидаемый ответ
| customer_id | full_name |
|---|---|
| 1 | Анна Соколова |
Как проверяем
Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
customer_id, full_name
Источник: разбор SQL-интервью в Альфа-Банк на Хабре, 2024. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.