##やろうとしたこと
あるサービスのアクセスユーザー数をセッション単位で数えたかった
table名:user_browsing_log
列名 | Type | note |
---|---|---|
session_id | text | セッションid |
browsing_at | timestamp without time zone | アクセス日時 |
最初に作ったSQL
first.sql
select distinct on(session_id) count(*) from user_browsing_log;
実行結果
ERROR: column "user_browsing_log.session_id" must appear in the GROUP BY clause or be used in an aggregate function
session_idをgroup byせよとのこと
2番目に作ったSQL
second.sql
select distinct on(session_id) count(*) from user_browsing_log group by session_id;
でもこうするとあるsession_idが何回アクセスしたか、になってしまう、、、、
#####正解
correct.sql
select count(distinct session_id) from user_browsing_log;
めっちゃ単純だしsqlにしてみると当たり前も当たり前な感じだった
ある列だけを基準にdistinctして他の列も取得するときのdistinct onを使う場合が固定概念になってしまってハマっていた