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

14. Договорная цена по категориям

Лёгкая

В listings у объявления с ценой «договорная» price_rub равен NULL. Статус — active или closed.

Для каждой категории по активным объявлениям верните: category, total — сколько объявлений, negotiable — сколько с договорной ценой, avg_price — средняя цена среди тех, где она указана, округлённая до рубля. Если цену не указал никто, avg_price — NULL. Порядок — по category.

В работе: Карточка категории для продакт-менеджера: сколько продавцов прячут цену и какая она в среднем у остальных.

Таблицы

listings — одна строка — одно объявление

КолонкаТипЧто значит
listing_idintключ
categorytextкатегория
citytextгород
price_rubintцена, NULL — договорная
statustextactive / closed

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

listings · 6 строк

listing_idcategorycityprice_rubstatus
1Ремонт и отделкаКазаньNULLactive
2Ремонт и отделкаКазань3500active
3Ремонт и отделкаСамара4200active
4МебельСамара12000active
5МебельПермь8000closed
6МебельПермьNULLactive

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

categorytotalnegotiableavg_price
Мебель2112000
Ремонт и отделка313850
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
category, total, negotiable, avg_price
условная агрегацияNULLGROUP BY

Источник: на данных Авито: объявления и цены. Условие пересказано своими словами.

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