В promo_codes коды хранятся заглавными буквами (OSEN25), у каждого — фиксированная скидка discount_rub. В orders.promo_code код записан так, как его ввёл покупатель, регистр бывает любым; NULL — без промокода.
Для каждого промокода верните code, uses — число неотменённых заказов с ним и discount_total — сумму скидок по этим заказам. Неиспользованный код — с нулями. Порядок — по uses по убыванию, затем по code.
В работе: Отчёт маркетинга после акции: какие коды сработали, а какие никто не ввёл.
Таблицы
promo_codes — промокоды
| Колонка | Тип | Что значит |
|---|---|---|
code | text | ключ, заглавными |
discount_rub | int | скидка на заказ |
valid_to | date | действует до |
orders — заказы
| Колонка | Тип | Что значит |
|---|---|---|
order_id | int | ключ |
user_id | int | покупатель |
promo_code | text | введённый код или NULL |
created_at | timestamp | время |
status | text | created / delivered / cancelled |
Пример: данные
promo_codes · 3 строки
| code | discount_rub | valid_to |
|---|---|---|
| OSEN25 | 300 | 2025-11-30 |
| PERVYI | 500 | 2025-12-31 |
| ZIMA | 200 | 2026-02-28 |
orders · 5 строк
| order_id | user_id | promo_code | created_at | status |
|---|---|---|---|---|
| 1 | 11 | OSEN25 | 2025-10-01T10:00:00 | delivered |
| 2 | 12 | OSEN25 | 2025-10-02T11:00:00 | delivered |
| 3 | 13 | PERVYI | 2025-10-03T12:00:00 | delivered |
| 4 | 14 | NULL | 2025-10-03T13:00:00 | delivered |
| 5 | 15 | OSEN25 | 2025-10-04T09:00:00 | cancelled |
Ожидаемый ответ
| code | uses | discount_total |
|---|---|---|
| OSEN25 | 2 | 600 |
| PERVYI | 1 | 500 |
| ZIMA | 0 | 0 |
Как проверяем
Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
code, uses, discount_total
Источник: на данных Ozon: акции и промокоды. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.