Обрабатывать данные в PHP или MySQL: Как использовать SELECT COUNT(*) … WHERE COUNT(*)>n

Писал я как-то запрос к базе данных. Задача передо мной стала не тривиальная:
Просуммировать обращения людей по каждому человеку, с количеством обращений свыше n-ного количества. Мат.части я не знал, поэтому первым делом попытался засунуть COUNT(*) в оператор условия. И получил ошибку
#1111 — Invalid use of group function. Таким образом mysql пытался сообщить мне, что я не туда засунул групповой оператор.
Следующим делом я попытался засунуть COUNT(*) в подзапрос, а подзапрос в условие. После этого обрабатывая 40 000 записей, сервак крепко повис. Но разбирать все записи в цикле PHP я не поспешил.
В итоге выходит, что я соврал в заголовке — использовать SELECT COUNT(*) … WHERE COUNT(*)>n нельзя, но можно по-другому.

А все заключается во-первых в операторе GROUP BY — оператор группировки, в этом случае объединяющий количество обращений на определенного уникального человека.
А во-вторых, после GROUP BY нужно поставить HAVING и уже в внутри HAVING писать нужное нам условие с использованием COUNT(*):

SELECT `id`, COUNT(*) AS count
FROM `table`
GROUP BY `id`
HAVING COUNT(*) > n

В итоге всю черновую работу делает за нас mysql, а мы разбираем уже значительно уточненный ответ и наслаждаемся)

Полезно(1)Бесполезно(0)

One Response to “ Обрабатывать данные в PHP или MySQL: Как использовать SELECT COUNT(*) … WHERE COUNT(*)>n ”

  1. Вот оно, вот оно решение моей мечты! Блин спасибо, мучился, мучился, таки нашёл

    Полезно(0)Бесполезно(0)
Комментарии закрыты.