取得したデータをグループ化する方法について紹介していきます。
部長
都道府県別にユーザー数を一覧化したいなあ
平社員
分かりました!
前提条件
都道府県別をIDとして保存しているprefecture_idカラムを利用してグループ化していく
使用するテーブル:USERSテーブル
+----+----------+------+------------------+--------+---------------+
| id | name | age | email | gender | prefecture_id |
+----+----------+------+------------------+--------+---------------+
| 1 | 柴犬 | 7 | shibainu@dog.com | 1 | 13 |
| 2 | コーギー | 8 | corgi@dog.com | 1 | 42 |
| 3 | ダックス | 10 | daks@dog.com | 2 | 11 |
| 4 | パグ | 3 | pug@dog.com | 2 | 10 |
| 5 | シーズー | 17 | shi-tzu@dog.com | 2 | 11 |
| 6 | 秋田犬 | 12 | akitainu@dog.com | 1 | 5 |
+----+----------+------+------------------+--------+---------------+
6 rows in set (0.000 sec)
条件
- 都道府県IDごとに集計する
- count集約関数を利用する
prefecture_idの値と都道府県名の紐づけ
- 13 ⇒ 東京都
- 42 ⇒ 長崎県
- 11 ⇒ 埼玉県
- 10 ⇒ 群馬県
- 5 ⇒ 秋田県
取得したデータの最大値を取得する
構文
select グループ化するカラム名,
count(*) from users
group by グループ化するカラム名;
コードの見方
使用するSQL文
select prefecture_id,
count(*) from users
group by prefecture_id;
今回は都道府県ID別に計算するのでカラム名はprefecture_idを指定します。
prefecture_id別にユーザー数を研鑽するため、count集約関数を利用します。
出力結果
+---------------+----------+
| prefecture_id | count(*) |
+---------------+----------+
| 5 | 1 |
| 10 | 1 |
| 11 | 2 |
| 13 | 1 |
| 42 | 1 |
+---------------+----------+
5 rows in set (0.001 sec)
都道府県ID別に数を数えることができました。テーブルに登録しているユーザー数が少ないですが、埼玉県だけ二人のユーザーがいることがわかります。
COUNTで*(アスタリスク)を指定する意味
今回はカラム名の部分にアスタリスクを指定しました。実はカラム名を指定しても行数を数えることができます。
select count(name) from users where gender = 2;
出力結果
+-------------+
| count(name) |
+-------------+
| 3 |
+-------------+
1 row in set (0.001 sec)
前述したアスタリスクを使用した方法と同じ結果が出力されます。
カラム名と*(アスタリスク)の違い
カラム名を指定する場合とアスタリスクにする場合には多少の違いがあります。
カラム名を指定する
指定したカラムに値がない場合(Null)はカウントしない。
*(アスタリスク)を指定する
Nullのある行数もカウントする。
双方の違いを理解して使い分けましょう。