В listings у объявления с ценой «договорная» price_rub равен NULL. Статус — active или closed.
Для каждой категории по активным объявлениям верните: category, total — сколько объявлений, negotiable — сколько с договорной ценой, avg_price — средняя цена среди тех, где она указана, округлённая до рубля. Если цену не указал никто, avg_price — NULL. Порядок — по category.
В работе: Карточка категории для продакт-менеджера: сколько продавцов прячут цену и какая она в среднем у остальных.
Таблицы
listings — одна строка — одно объявление
| Колонка | Тип | Что значит |
|---|---|---|
listing_id | int | ключ |
category | text | категория |
city | text | город |
price_rub | int | цена, NULL — договорная |
status | text | active / closed |
Пример: данные
listings · 6 строк
| listing_id | category | city | price_rub | status |
|---|---|---|---|---|
| 1 | Ремонт и отделка | Казань | NULL | active |
| 2 | Ремонт и отделка | Казань | 3500 | active |
| 3 | Ремонт и отделка | Самара | 4200 | active |
| 4 | Мебель | Самара | 12000 | active |
| 5 | Мебель | Пермь | 8000 | closed |
| 6 | Мебель | Пермь | NULL | active |
Ожидаемый ответ
| category | total | negotiable | avg_price |
|---|---|---|---|
| Мебель | 2 | 1 | 12000 |
| Ремонт и отделка | 3 | 1 | 3850 |
Как проверяем
Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один
SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
category, total, negotiable, avg_price
Источник: на данных Авито: объявления и цены. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
Стр. 1Ctrl+Enter — запуск · Ctrl+Shift+Enter — отправка
Посмотреть данные, проверить кусок запроса. На зачёт не влияет.
Здесь появится результат отправки.