MySQL(その16 条件分岐(case))

15から続きます。

1:条件分岐caseとは?

SQLで場合分けを記述する際に使う。場合分けを、条件分岐とよぶ。

例:ユーザーのアクティビティ度合いによって施策を変えたいので
ユーザーを累計注文回数でランク分けしてランクが高い順にしたい!
A 5回以上 B 2回以上 C 1回

補足:注文回数0回のユーザーは出力不要。必要な情報はユーザーid,累計注文回数,ユーザーランク(A or B or C)

select
u.id,
count(*) as num,
case
when count(*)>= 5 then 'A'
when count(*)>= 2 then 'B'
else'C'
end as user_rank
from users as u
inner join
orders as o
on u.id = o.user_id
group by
u.id
order by user_rank;

※ポイント

累計注文回数をnumとした。group byで注文回数を集計

order byでユーザーランクが高い順に

取得値nullを0に置き換える

select
p.id,p.name,
sum(od.product_qty)as num
from
products p left outer join order_details od
on p.id = od.product_id
group by p.id;

nullを0に置き換えたい!

select
p.id,p.name,
case
when sum(od.product_qty)is null then 0
else sum(od.product_qty)
end as num
from
products p
left outer join
order_details od
on p.id = od.product_id
group by p.id;

0に置き換わった!

応用1)全商品を累計販売個数でランク分けしたい!

補足:A 20個以上 B 10個以上 C 10個未満 ランクが高い順に並び替える
必要な列は商品 ID 商品名 販売個数 ランクER図を参考にする

select
p.id,p.name,sum(product_qty),
case
when sum(product_qty) >= 20 then 'A'
when sum(product_qty) >= 10 then 'B'
else 'C'
end as r
from
products as p
left outer join
order_details as od
on p.id = od.product_id
group by p.id
order by r;

※ポイント

Rankは予約語で使えないためrとした。product_qtyは販売個数で、group byでproduct_idをグループ化して、sumで累計販売個数を導き出した。

その17に続きます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です