Группировка записей и функция COUNT()

Пусть необходимо узнать, какие сообщения и в каких темах имеются. Для этого можно воспользоваться стандартным запросом с использованием оператора SELECT:

Для того чтобы узнать сколько сообщений на форуме имеется, можно воспользоваться встроенной функцией COUNT(). Эта функция подсчитывает число строк. Причем, если в качестве аргумента этой функции выступает *, то подсчитываются все строки таблицы. А если в качестве аргумента указывается имя столбца, то подсчитываются только те строки, которые имеют значение в указанном столбце.

В данном примере оба аргумента дадут одинаковый результат, т.к. все столбцы таблицы имеют тип NOTNULL.

Напишем запрос, используя в качестве аргумента столбец id_topic:

SELECTCOUNT(id_topic) FROMposts;

Таким образом, в темах имеется 4 сообщения.

Пусть теперь необходимо узнать, сколько сообщений имеется в каждой теме. Для этого понадобится сгруппировать сообщения по темам и вычислить для каждой группы количество сообщений. Для группировки в SQL используется оператор GROUPBY.

Запрос теперь будет выглядеть так:

SELECT id_topic, COUNT(id_topic) FROM posts GROUP BY id_topic;

Оператор GROUPBY указывает СУБД сгруппировать данные по столбцу id_topic (т.е. каждая тема – отдельная группа) и для каждой группы подсчитать количество строк:

Таким образом, в теме с id=1 – 3 сообщения, а с id=4 – одно.

Если бы в поле id_topic были возможны отсутствия значений, то такие строки были бы объединены в отдельную группу со значением NULL.

Предположим, что нас интересуют только те группы, в которых больше двух сообщений. В обычном запросе данное условие указывается с помощью оператора WHERE, но этот оператор умеет работать только со строками, а для групп те же функции выполняет оператор HAVING:

SELECTid_topic, COUNT(id_topic) FROMposts

GROUPBYid_topic

HAVINGCOUNT(id_topic) > 2;

В результате имеем:

Условия, которые можно задавать оператором WHERE, можно задавать и оператором HAVING, только надо запомнить, что WHERE фильтрует строки, а HAVING– группы.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: