Spec-Zone .ru
спецификации, руководства, описания, API

3.3.4.8. Подсчет Строк

Базы данных часто используются, чтобы ответить на вопрос, "Как часто определенный тип данных происходит в таблице?" Например, Вы могли бы хотеть знать, сколько домашних животных Вы имеете, или сколько домашних животных каждый владелец имеет, или Вы могли бы хотеть выполнить различные виды операций переписи на Ваших животных.

Подсчет общего количества животных, которых Вы имеете, является тем же самым вопросом как, "Сколько строк находится в pet таблица?" потому что есть одна запись на домашнее животное. COUNT(*) считает число строк, таким образом, запрос, чтобы считать Ваших животных похож на это:

mysql> SELECT COUNT(*) FROM pet;+----------+| COUNT(*) |+----------+|        9 |+----------+

Ранее, Вы получали имена людей, которым принадлежали домашние животные. Можно использовать COUNT() если Вы хотите узнать, сколько домашних животных каждый владелец имеет:

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY
        owner;+--------+----------+| owner  | COUNT(*) |+--------+----------+| Benny  |        2 || Diane  |        2 || Gwen   |        3 || Harold |        2 |+--------+----------+

Предыдущее использование запроса GROUP BY сгруппировать все записи для каждого owner. Использование COUNT() в соединении с GROUP BY полезно для характеристики Ваших данных при различных группировках. Следующие примеры показывают различные способы выполнить операции переписи животных.

Число животных на разновидности:

mysql> SELECT species, COUNT(*) FROM pet GROUP BY
        species;+---------+----------+| species | COUNT(*) |+---------+----------+| bird    |        2 || cat     |        2 || dog     |        3 || hamster |        1 || snake   |        1 |+---------+----------+

Число животных на пол:

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY
        sex;+------+----------+| sex  | COUNT(*) |+------+----------+| NULL |        1 || f    |        4 || m    |        4 |+------+----------+

(В этом выводе, NULL указывает, что пол неизвестен.)

Число животных на комбинацию разновидностей и пола:

mysql> SELECT species, sex, COUNT(*) FROM pet GROUP
        BY species, sex;+---------+------+----------+| species | sex  | COUNT(*) |+---------+------+----------+| bird    | NULL |        1 || bird    | f    |        1 || cat     | f    |        1 || cat     | m    |        1 || dog     | f    |        1 || dog     | m    |        2 || hamster | f    |        1 || snake   | m    |        1 |+---------+------+----------+

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

mysql> SELECT species, sex, COUNT(*) FROM pet    -> WHERE species = 'dog' OR species = 'cat'    -> GROUP BY species, sex;+---------+------+----------+| species | sex  | COUNT(*) |+---------+------+----------+| cat     | f    |        1 || cat     | m    |        1 || dog     | f    |        1 || dog     | m    |        2 |+---------+------+----------+

Или, если Вы хотели число животных на пол только для животных, пол которых известен:

mysql> SELECT species, sex, COUNT(*) FROM pet    -> WHERE sex IS NOT NULL    -> GROUP
        BY species, sex;+---------+------+----------+| species | sex  | COUNT(*) |+---------+------+----------+| bird    | f    |        1 || cat     | f    |        1 || cat     | m    |        1 || dog     | f    |        1 || dog     | m    |        2 || hamster | f    |        1 || snake   | m    |        1 |+---------+------+----------+

Если Вы называете столбцы, чтобы выбрать в дополнение к COUNT() значение, a GROUP BY пункт должен присутствовать, который называет те те же самые столбцы. Иначе, следующее происходит:

См. также Раздел 12.17.3, "MySQL Extensions к GROUP BY".