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

21. Объявления, где цену снижали дважды

Средняя

В price_history — все цены объявления: первая строка — цена при публикации, каждая следующая — правка продавца. Время правок у одного объявления не повторяется.

Снижение — правка, после которой цена стала ниже предыдущей. Верните объявления, где снижений не меньше двух: listing_id, cuts — число снижений, drop_pct — на сколько процентов текущая (последняя) цена ниже первой, с одним знаком. Если цена в итоге выросла, drop_pct отрицательный.

Порядок — по drop_pct по убыванию, затем по listing_id.

В работе: Подсказка продавцу «снизьте цену» и оценка, помогают ли снижения продать быстрее.

Таблицы

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

КолонкаТипЧто значит
listing_idintобъявление
changed_attimestampкогда установлена
price_rubintцена

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

price_history · 9 строк

listing_idchanged_atprice_rub
12026-01-10T10:00:0045000
12026-01-15T09:00:0042000
12026-01-20T18:00:0039000
22026-01-11T12:00:007000
22026-01-18T12:00:006500
32026-01-12T08:00:00120000
32026-01-14T08:00:00110000
32026-01-16T08:00:00115000
32026-01-19T08:00:0099000

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

listing_idcutsdrop_pct
3217,5
1213,3
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 4 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
listing_id, cuts, drop_pct
оконные функцииGROUP BYHAVING

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

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