Postgresでdistinct onしながらcountしようとしたらハマった

やろうとしたこと

あるサービスのアクセスユーザー数をセッション単位で数えたかった

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を使う場合が固定概念になってしまってハマっていた

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.