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

201. Объявления продавцов без блокировки

Лёгкая

В listings — активные объявления, в blocked_accounts — решения модерации о блокировке продавца. Если аккаунт удалили раньше, чем разобрали жалобу, seller_id в блокировке пустой.

Посчитайте, сколько объявлений в каждой категории у продавцов, которых нет среди заблокированных. Верните category, listings, порядок — по category. Категории, где не осталось объявлений, не выводите.

В работе: Чистка выдачи после волны блокировок: сколько объявлений реально остаётся в каталоге.

Таблицы

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

КолонкаТипЧто значит
listing_idintключ
seller_idintпродавец
categorytextкатегория
price_rubintцена

blocked_accounts — решения о блокировке; у одного продавца их может быть несколько

КолонкаТипЧто значит
block_idintключ
seller_idintпродавец, NULL — аккаунт удалён
reasontextпричина

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

listings · 6 строк

listing_idseller_idcategoryprice_rub
110Авто890000
210Авто1250000
311Недвижимость5400000
412Электроника23990
513Электроника7500
614Авто640000

blocked_accounts · 3 строки

block_idseller_idreason
111фейковые фото
2NULLмошенничество
313спам

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

categorylistings
Авто3
Электроника1
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
category, listings
антиджойнNULLподзапросGROUP BY

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