SQLにもExcelのようにデータを操作する関数があります。今回はデータの行数を取得するCOUNT集約関数を重複している行を除外するして使用する方法を紹介します。
部長
お店の11月の訪問者数(ユニークユーザー)がしりたいなあ
平社員
がんばります・・・。
前提条件
来店者数を記録しているテーブルから指定した期限内に来店している訪問者数を取得する
使用するテーブル:VISITテーブル
+------+---------+---------------------+-------------+
| id | user_id | visit_time | visit_month |
+------+---------+---------------------+-------------+
| 1 | 2 | 2030-12-31 11:00:00 | 2030-12-31 |
| 2 | 6 | 2030-12-25 18:30:00 | 2030-12-25 |
| 3 | 1 | 2030-12-10 10:00:00 | 2030-12-10 |
| 4 | 4 | 2030-11-01 20:15:00 | 2030-11-01 |
| 5 | 3 | 2030-11-30 09:45:00 | 2030-11-30 |
| 6 | 5 | 2030-10-15 23:30:00 | 2030-10-15 |
| 7 | 4 | 2030-11-20 20:15:00 | 2030-11-20 |
+------+---------+---------------------+-------------+
7 rows in set (0.000 sec)
条件
- 11月の来店者数を数える
- 複数回来店していても同じ犬ならまとめて1と数える。
11月のデータを取得する
select * from visit where visit_month >= '2030-11-01' and visit_month < '2030-12-01';
コードの見方
出力結果
+------+---------+---------------------+-------------+
| id | user_id | visit_time | visit_month |
+------+---------+---------------------+-------------+
| 4 | 4 | 2030-11-01 20:15:00 | 2030-11-01 |
| 5 | 3 | 2030-11-30 09:45:00 | 2030-11-30 |
| 7 | 4 | 2030-11-20 20:15:00 | 2030-11-20 |
+------+---------+---------------------+-------------+
3 rows in set (0.000 sec)
3つのレコードが取得できました。
user_idが同じレコードは同一犬物なのでまとめて1と数えます。
今回の場合はuser_idが4が重複していることがわかります。
取得したデータの行数を重複を除外して取得する
構文
select count(distinct 重複を除外してカウントするカラム) from visit where 条件;
使用するSQL文
select count(distinct user_id) from visit
where
visit_month >= '2030-11-01'
and
visit_month < '2030-12-01';
今回は重複を除外してカウントするのは user_id です。
重複を除外するカラムの前には『distinct』を指定します。※半角スペースで区切るのを忘れずに!
出力結果
+-------------------------+
| count(distinct user_id) |
+-------------------------+
| 2 |
+-------------------------+
1 row in set (0.001 sec)
重複していた値を除外して来店者数を取得することができました。