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

231. Кто чаще всех ездит ночью в каждом городе

Средняя

В orders — заказы такси: user_id, city, время заказа order_dttm. Ночной считаем поездку, заказанную с 22:00:00 включительно до 06:00:00 не включая: 05:59 — ночь, 06:00 — уже утро.

Для каждого города выведите трёх пользователей с наибольшим числом ночных поездок. Если на третьем месте ничья, выводите всех, кто его делит. Пользователи без ночных поездок в рейтинг не входят. Верните city, user_id, night_rides, порядок — city, затем night_rides по убыванию, затем user_id.

В оригинальном тестовом просили топ-100; у нас данных меньше, поэтому топ-3.

В работе: Отбор аудитории для ночного тарифа или промокода на поздние поездки.

Таблицы

orders — одна строка — один заказ

КолонкаТипЧто значит
order_idintключ
user_idintпользователь
citytextгород
order_dttmtimestampвремя заказа

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

orders · 16 строк

order_iduser_idcityorder_dttm
1101Казань2025-11-01T23:10:00
2101Казань2025-11-02T01:00:00
3101Казань2025-11-03T05:59:00
4101Казань2025-11-03T12:00:00
5102Казань2025-11-01T22:00:00
6102Казань2025-11-02T04:30:00
7102Казань2025-11-02T06:00:00
8103Казань2025-11-04T22:45:00
9103Казань2025-11-05T00:15:00
10106Казань2025-11-05T02:20:00
11106Казань2025-11-06T23:30:00
12104Казань2025-11-06T03:00:00
13104Казань2025-11-06T06:30:00
14105Казань2025-11-07T15:00:00
15201Пермь2025-11-01T23:59:59
16202Пермь2025-11-02T06:00:00

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

cityuser_idnight_rides
Казань1013
Казань1022
Казань1032
Казань1062
Пермь2011
Как проверяем Ваш запрос выполняется в PostgreSQL 16 прямо в браузере на 5 наборах данных: пример выше и скрытые — с NULL, повторами и пустыми таблицами. Нужен один SELECT, можно с WITH. Сравниваем значения по порядку колонок, названия колонок могут быть свои. Порядок строк важен — как задано в условии.
city, user_id, night_rides
топ-N в группеоконные функциидатыGROUP BY

Источник: тестовое продуктового аналитика (Middle) в Wildberries, сборник No Data No Growth, 2025. Условие пересказано своими словами.