今回の課題
ひとつのクエリ内で、UNIONとGROUPBYを使用した際に、
視認性が低くなってしまった。
そのため、視認性の高いクエリの書き方をメモすることにした。
視認性の高いクエリ
下記の手順でクエリを記述すると視認性が高くなった。
- WITH句内でUNION結合。
- 外側のクエリでGROUP BYする
with master as (
select
session
, user_id
, case
when user_id is null then 'guest'
when user_id is not null then 'login'
else null
end as login_status
, action
, category
, products
, amount
, stamp
from
action_log
union all
select
session
, user_id
, 'all' as login_status
, action
, category
, products
, amount
, stamp
from
action_log
)
select
action
, login_status
, count(session) as action_count
, count(distinct session) as action_uu
from
master
group by
action
, login_status
;
視認性の低いクエリ
最初はこちらでクエリを作成してしまった。
GROUPBYしながらUNION結合していたため、非常に見づらいクエリになってしまっていた。
with master as (
select
action
, case
when user_id is null then 'guest'
when user_id is not null then 'login'
else null
end as login_status
, count(session) as action_count
, count(distinct session) as action_uu
from
action_log
group by
actoin
, login_staus
union all
select
action
, 'all' as login_status
, count(session) as action_count
, count(distinct session) as action_uu
from
action_log
group by
action
)
select
*
from
master
;