Сгруппируйте SMS по phone_number, оставьте группы с COUNT(*) > 1, отсортируйте по убыванию счётчика и примените LIMIT 10.
Топ‑10 номеров, получивших наибольшее количество SMS
Сгруппируйте SMS по phone_number, оставьте группы с COUNT(*) > 1, отсортируйте по убыванию счётчика и примените LIMIT 10.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Таблица sms содержит отправленные сообщения.
- Сформировать запрос, который выводит телефонные номера, получившие более одной SMS.
- Отсортировать результаты так, чтобы сначала шли номера с максимальным количеством полученных сообщений.
- Оставить в выдаче только десять самых часто получающих SMS номеров.
CREATE TABLE sms (
id BIGSERIAL PRIMARY KEY,
phone_number VARCHAR(255),
message VARCHAR(1024)
)
Ответ
Сгруппируйте SMS по phone_number, оставьте группы с COUNT(*) > 1, отсортируйте по убыванию счётчика и примените LIMIT 10.
SELECT phone_number, COUNT(*) AS received_count
FROM sms
WHERE phone_number IS NOT NULL
GROUP BY phone_number
HAVING COUNT(*) > 1
ORDER BY received_count DESC, phone_number
LIMIT 10;
Дополнительная сортировка по номеру делает выборку стабильной при равных счётчиках. NULL исключён, поскольку не обозначает телефонный номер. Запрос считает записи таблицы, а не подтверждённые доставки: для последнего потребовалось бы отдельное поле статуса. Все номера сверх первых десяти, даже с одинаковой частотой на границе, не попадут в результат.