SQL問題 フラグ別の集計

問題:A. 12月中にcategory1を購入したことがある、B.全期間を通してcategory2の複数種類の商品購入経験がある、C.AとBの両方、D.それ以外の4セグメントについて11月1日から20日の購入金額を求める。

kiso1の5つExcelファイルにあるテーブル5つから必要なデータを選ぶこと。 使い方はSQL学習用サンプルデータを参照。

idごとに
・AとBの条件を満たすかどうかのフラグを立てる
・指定された期間中の購入金額
を作れば2つのフラグをキーにすることでセグメント別に集計ができる。

解答:
A 23,920
B  5,800
C 12,450
D  9,160

解説:

SELECT
flag_a,flag_b,SUM(sales) as sales
FROM(
SELECT
customer_id
,MAX(CASE WHEN date>=’2019-12-01′ AND date<=’2019-12-31′ AND category_id=1 THEN 1 ELSE 0 END) as flag_a
,MAX(CASE WHEN customer_id IN (SELECT customer_id FROM kiso1_pos WHERE category_id=2 GROUP BY 1 HAVING COUNT(DISTINCT item_id)>1) THEN 1 ELSE 0 END) as flag_b
,SUM(CASE WHEN date>=’2019-11-01′ AND date<=’2019-11-20′ THEN tanka*quantity ELSE end) as sales
FROM kiso1_pos p
LEFT JOIN kiso1_master m
USING(category_id,item_id)
GROUP BY 1
)
GROUP BY 1,2

SQL問題一覧はこちら

2020年2月15日SQL問題

Posted by shinu