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で累計販売個数を導き出した。