Топ-10 телефонов, получивших больше всего SMS

18. Найти топ-10 номеров, получивших больше всего SMS

Условие задачи:
Дана таблица sms с отправленными сообщениями.

Необходимо:

  • найти номера телефонов, которые получили больше одной SMS;

  • посчитать количество сообщений для каждого номера;

  • отсортировать номера по убыванию количества SMS;

  • вывести только топ-10 номеров.

Код:

sms

id | phone      | message
---|------------|----------------
1  | 9876552222 | some message
2  | 9876552222 | some message
3  | 9876552234 | another message

Спойлеры к решению

Подсказки
💡 Сгруппируй записи по phone.
💡 Количество сообщений можно посчитать через COUNT(*).
💡 Для фильтрации номеров с более чем одной SMS используй HAVING.
💡 Для получения самых популярных номеров используй ORDER BY ... DESC и LIMIT 10.

Решение
SELECT
    phone,
    COUNT(*) AS sms_count
FROM sms
GROUP BY phone
HAVING COUNT(*) > 1
ORDER BY sms_count DESC
LIMIT 10;

GROUP BY phone объединяет все SMS по номеру телефона.

Условие:

HAVING COUNT(*) > 1

оставляет только номера, которые получили больше одного сообщения.

Затем:

ORDER BY sms_count DESC
LIMIT 10

сортирует номера по количеству полученных SMS и оставляет первые 10.