1:対象行の行数を数えるcount集約関数
例:ECサイト(架空)のユーザーが何人いるか調べたい!
select count(*) from users;
※ポイント
count(*)とするとテーブルの行数をすべて取得できる。
女性ユーザーが何人いるのか知りたい!
select count(*) from users where users.gender = 2;
2:応用)2017年1月にアクセスした ユニークユーザー数(ec サイト登録ユーザのみ)を調べたい!
そもそもユニークアクセスユーザーとは?(ヒント)
1:決まった集計期間内にアクセスしたユーザーの数を表す数値
2:あるユーザーA が決まった期間内に10アクセスしたとしても1と数える。where句と集約関数 count (distinct expr)を組み合わせて使う。
3:count (distinct expr)の形で、count関数は重複を排除した形で個数を取得できる
ER図を参考にまず2017年1月にアクセスしたユーザ数を書いてみる
select * from access_logs where request_month = '2017-01-01';
次にユニークユーザ数の記述をする
select count(distinct user_id) from access_logs where request_month = '2017-01-01';
データをグループ化(group by句)
例:都道府県別のユーザー数を調べたい!
select prefecture_id,count(*) from users group by prefecture_id;
※ポイント
group byで指定する列名(prefecture_id)をグループ化したものをcountで集計してあげる
応用)2017年の月別ユニークユーザー数を知りたい!
ヒント:ER図を参考にしてaccess_logsテーブルのrequest_monthを使う
select request_month, count(distinct user_id) from access_logs where request_month >='2017-01-01 00:00:00' and request_month <'2018-01-01 00:00:00' group by request_month;
※ポイント
whereでrequest_monthの期間を指定しgroup byでrequest_monthを月ごとにグループ化する。最後にcount(distinct user_id)でユニークユーザーを調べる
集約結果をさらに絞り込む(having句)
※ポイント
having count(distinct user_id) >= 630;
により630以上の月のみに絞り込む
例1:アクセスログを2017年1月から2017年6月まで調べたい!
select * from access_logs where request_month >=’2017-01-01′
and request_month <‘2017-07-01’;
例2:月ごと(1月から6月まで)のリクエスト数を調べたい!
select request_month, count(*) from access_logs where request_month >='2017-01-01' and request_month <'2017-07-01' group by request_month;
例3:(1月から6月まで)のアクセス数が1,000以上の月だけ抜き出したい!
select request_month, count(*) from access_logs where request_month >='2017-01-01' and request_month <'2017-07-01' group by request_month having count(*) >= 1000;
※ポイント
アクセス数なのでcount(*)で数え上げる。having句で1000以上のみ表示