データベースは ``ある種のデータはテーブルに何回出現するか'' という質問に答えるためによく使用されます。たとえば、自分の飼っているペットの数や、飼い主ごとに飼っているペットの数を調べたり、ペットに関するさまざまな個体数調査を実行することができます。
飼っているペットの総数をカウントするのは、``pet
テーブルには何件のレコードがあるか''
という質問と同じです。これは、このテーブルでは
1 匹のペットについて 1
レコードを使用しているためです。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 |
+--------+----------+
owner
ごとのすべてのレコードをグループ化するために
GROUP BY
を使用していることに注意してください。これを指定しない場合、以下のエラーメッセージが表示されます。
mysql> SELECT owner, COUNT(*) FROM pet;
ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)
with no GROUP columns is illegal if there is no GROUP BY clause
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 | +---------+------+----------+
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.