SQLにもExcelのようにデータを操作する関数があります。今回はデータの行数を取得するCOUNT集約関数について紹介していきます。
部長
女性のユーザー数が知りたいなあ
平社員
承知致しました!
前提条件
ユーザーを管理しているテーブルから指定した性別の行数をカウントする
使用するテーブル:USERSテーブル
+----+----------+------+------------------+--------+
| id | name | age | email | gender |
+----+----------+------+------------------+--------+
| 1 | 柴犬 | 7 | shibainu@dog.com | 1 |
| 2 | コーギー | 8 | corgi@dog.com | 1 |
| 3 | ダックス | 10 | daks@dog.com | 2 |
| 4 | パグ | 3 | pug@dog.com | 2 |
| 5 | シーズー | 17 | shi-tzu@dog.com | 2 |
| 6 | 秋田犬 | 12 | akitainu@dog.com | 1 |
+----+----------+------+------------------+--------+
6 rows in set (0.001 sec)
条件
- genderカラムの1が男性、2が女性
- 女性のユーザー数はgenderカラムの値が2のものを数えることにする
女性のユーザーを取得する
select * from users where gender = 2;
コードの見方
出力結果
+----+----------+------+-----------------+--------+
| id | name | age | email | gender |
+----+----------+------+-----------------+--------+
| 3 | ダックス | 10 | daks@dog.com | 2 |
| 4 | パグ | 3 | pug@dog.com | 2 |
| 5 | シーズー | 17 | shi-tzu@dog.com | 2 |
+----+----------+------+-----------------+--------+
3 rows in set (0.001 sec)
3つのレコードが取得できたので行数を計算していきます。
取得したデータの行数を取得する
構文
select count(カラム名または*) from users where 条件;
使用するSQL文
select count(*) from users where gender = 2;
今回は行数を出すのでカラム名は*(アスタリスク)を指定します。
条件には性別の女性を表す2を指定しています。
出力結果
+----------+
| count(*) |
+----------+
| 3 |
+----------+
1 row in set (0.001 sec)
女性のユーザー数を取得することができました。
*(アスタリスク)を指定する意味
今回はカラム名の部分にアスタリスクを指定しました。実はカラム名を指定しても行数を数えることができます。
select count(name) from users where gender = 2;
出力結果
+-------------+
| count(name) |
+-------------+
| 3 |
+-------------+
1 row in set (0.001 sec)
前述したアスタリスクを使用した方法と同じ結果が出力されます。
カラム名と*(アスタリスク)の違い
カラム名を指定する場合とアスタリスクにする場合には多少の違いがあります。
カラム名を指定する
指定したカラムに値がない場合(Null)はカウントしない。
*(アスタリスク)を指定する
Nullのある行数もカウントする。
双方の違いを理解して使い分けましょう。