18. Найти топ-10 номеров, получивших больше всего SMS
Условие задачи:
Дана таблица sms с отправленными сообщениями.
Необходимо:
найти номера телефонов, которые получили больше одной SMS;
посчитать количество сообщений для каждого номера;
отсортировать номера по убыванию количества SMS;
вывести только топ-10 номеров.
Код:
sms
id | phone | message
---|------------|----------------
1 | 9876552222 | some message
2 | 9876552222 | some message
3 | 9876552234 | another message
Спойлеры к решению
Подсказки
💡 Сгруппируй записи по
💡 Количество сообщений можно посчитать через
💡 Для фильтрации номеров с более чем одной SMS используй
💡 Для получения самых популярных номеров используй
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.