------------------------------------------------------------------------
-- BOOSTER QUIZ 10-1-1
------------------------------------------------------------------------
SELECT CASE WHEN GROUPING(t1.mbr_gd) = 1 THEN 'Total' ELSE t1.mbr_gd END mbr_gd
,COUNT(*) mbr_cnt
FROM startdbmy.ms_mbr t1
WHERE t1.mbr_st = 'ACTV'
GROUP BY t1.mbr_gd WITH ROLLUP;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-1-2
------------------------------------------------------------------------
SELECT CASE WHEN GROUPING(t1.mbr_gd) = 1 THEN 'Total' ELSE t1.mbr_gd END mbr_gd
,CASE WHEN GROUPING(t1.join_tp) = 1 THEN 'Total' ELSE t1.join_tp END join_tp
,COUNT(*) mbr_cnt
FROM startdbmy.ms_mbr t1
WHERE t1.mbr_st = 'ACTV'
GROUP BY t1.mbr_gd, t1.join_tp WITH ROLLUP;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-1-3
------------------------------------------------------------------------
SELECT CASE WHEN GROUPING(t1.join_tp) = 1 THEN 'Total' ELSE t1.join_tp END join_tp
,CASE WHEN GROUPING(t1.mbr_gd) = 1 THEN 'Total' ELSE t1.mbr_gd END mbr_gd
,COUNT(*) mbr_cnt
FROM startdbmy.ms_mbr t1
WHERE t1.mbr_st = 'ACTV'
GROUP BY t1.join_tp ,t1.mbr_gd WITH ROLLUP;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-1-4
------------------------------------------------------------------------
SELECT CASE WHEN t3.gr_join_tp = 1 THEN 'Total' ELSE t4.base_cd_nm END join_tp_nm
,CASE WHEN t3.gr_ord_ym = 1 THEN 'Total' ELSE t3.ord_ym END ord_ym
,CASE WHEN t3.gr_pay_tp = 1 THEN 'Total' ELSE t5.base_cd_nm END pay_tp_nm
,t3.ord_amt_sum
FROM (
SELECT t1.join_tp
,GROUPING(t1.join_tp) gr_join_tp
,DATE_FORMAT(t2.ord_dtm,'%Y%m') ord_ym
,GROUPING(DATE_FORMAT(t2.ord_dtm,'%Y%m')) gr_ord_ym
,t2.pay_tp
,GROUPING(t2.pay_tp) gr_pay_tp
,SUM(t2.ord_amt) ord_amt_sum
FROM startdbmy.ms_mbr t1
INNER JOIN startdbmy.tr_ord t2
ON (t2.mbr_id = t1.mbr_id)
WHERE t2.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20230301','%Y%m%d')
AND t1.mbr_gd = 'PLAT'
GROUP BY t1.join_tp ,DATE_FORMAT(t2.ord_dtm,'%Y%m') ,t2.pay_tp WITH ROLLUP
) t3
LEFT OUTER JOIN startdbmy.cm_base_cd t4
ON (t4.base_cd_dv = 'join_tp' AND t4.base_cd = t3.join_tp)
LEFT OUTER JOIN startdbmy.cm_base_cd t5
ON (t5.base_cd_dv = 'pay_tp' AND t5.base_cd = t3.pay_tp)
;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-1-5
------------------------------------------------------------------------
SELECT CASE WHEN t3.gr_join_tp = 1 THEN 'Total' ELSE t4.base_cd_nm END join_tp_nm
,CASE WHEN t3.gr_ord_ym = 1 THEN 'Total' ELSE t3.ord_ym END ord_ym
,CASE WHEN t3.gr_pay_tp = 1 THEN 'Total' ELSE t5.base_cd_nm END pay_tp_nm
,t3.ord_amt_sum
FROM (
SELECT t1.join_tp
,GROUPING(t1.join_tp) gr_join_tp
,DATE_FORMAT(t2.ord_dtm,'%Y%m') ord_ym
,GROUPING(DATE_FORMAT(t2.ord_dtm,'%Y%m')) gr_ord_ym
,t2.pay_tp
,GROUPING(t2.pay_tp) gr_pay_tp
,SUM(t2.ord_amt) ord_amt_sum
FROM startdbmy.ms_mbr t1
INNER JOIN startdbmy.tr_ord t2
ON (t2.mbr_id = t1.mbr_id)
WHERE t2.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20230301','%Y%m%d')
AND t1.mbr_gd = 'PLAT'
GROUP BY t1.join_tp ,DATE_FORMAT(t2.ord_dtm,'%Y%m') ,t2.pay_tp WITH ROLLUP
) t3
LEFT OUTER JOIN startdbmy.cm_base_cd t4
ON (t4.base_cd_dv = 'join_tp' AND t4.base_cd = t3.join_tp)
LEFT OUTER JOIN startdbmy.cm_base_cd t5
ON (t5.base_cd_dv = 'pay_tp' AND t5.base_cd = t3.pay_tp)
WHERE (
t3.gr_pay_tp = 0 -- 기본 데이터(GROUP BY 마지막 컬럼의 GROUPING이 0)
OR
(t3.gr_join_tp = 0 AND t3.gr_ord_ym = 1 AND t3.gr_pay_tp = 1) -- 중간합계(join_tp별 집계 데이터만)
);
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-2-1
------------------------------------------------------------------------
SELECT t1.mbr_id
,SUM(CASE WHEN DATE_FORMAT(t1.ord_dtm,'%Y%m%d') = '20230101' THEN t1.ord_amt END) ord_amt_0101
,SUM(CASE WHEN DATE_FORMAT(t1.ord_dtm,'%Y%m%d') = '20230102' THEN t1.ord_amt END) ord_amt_0102
,SUM(CASE WHEN DATE_FORMAT(t1.ord_dtm,'%Y%m%d') = '20230103' THEN t1.ord_amt END) ord_amt_0103
FROM startdbmy.tr_ord t1
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20230104','%Y%m%d')
AND t1.shop_id = 'S028'
GROUP BY t1.mbr_id
ORDER BY t1.mbr_id;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-2-2
------------------------------------------------------------------------
SELECT DATE_FORMAT(t1.ord_dtm,'%Y%m%d') ord_ymd
,IFNULL(SUM(CASE WHEN t1.mbr_id = 'M0027' THEN 1 END),0) ord_cnt_M0027
,IFNULL(SUM(CASE WHEN t1.mbr_id = 'M3627' THEN 1 END),0) ord_cnt_M3627
,IFNULL(SUM(CASE WHEN t1.mbr_id = 'M3927' THEN 1 END),0) ord_cnt_M3927
FROM startdbmy.tr_ord t1
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20230104','%Y%m%d')
AND t1.shop_id = 'S028'
GROUP BY DATE_FORMAT(t1.ord_dtm,'%Y%m%d')
ORDER BY DATE_FORMAT(t1.ord_dtm,'%Y%m%d');
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-2-3
------------------------------------------------------------------------
SELECT DATE_FORMAT(t1.ord_dtm,'%Y%m') ord_ym
,t1.shop_id
,t3.item_cat
,SUM(t2.ord_qty) ord_qty_sum
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.tr_ord_det t2
ON (t1.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item t3
ON (t3.item_id = t2.item_id)
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20230301','%Y%m%d')
AND t1.shop_id IN ('S001','S002')
GROUP BY DATE_FORMAT(t1.ord_dtm,'%Y%m') ,t1.shop_id ,t3.item_cat
ORDER BY DATE_FORMAT(t1.ord_dtm,'%Y%m') ,t1.shop_id ,t3.item_cat;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-2-4
------------------------------------------------------------------------
SELECT t4.ord_ym ,t4.item_cat
,SUM(CASE WHEN t4.shop_id = 'S001' THEN t4.ord_qty_sum END) qty_S001
,SUM(CASE WHEN t4.shop_id = 'S002' THEN t4.ord_qty_sum END) qty_S002
FROM (
SELECT DATE_FORMAT(t1.ord_dtm,'%Y%m') ord_ym
,t1.shop_id
,t3.item_cat
,SUM(t2.ord_qty) ord_qty_sum
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.tr_ord_det t2
ON (t1.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item t3
ON (t3.item_id = t2.item_id)
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20230301','%Y%m%d')
AND t1.shop_id IN ('S001','S002')
GROUP BY DATE_FORMAT(t1.ord_dtm,'%Y%m') ,t1.shop_id ,t3.item_cat
ORDER BY DATE_FORMAT(t1.ord_dtm,'%Y%m') ,t1.shop_id ,t3.item_cat
) t4
GROUP BY t4.ord_ym ,t4.item_cat
ORDER BY t4.ord_ym ,t4.item_cat;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-2-5
------------------------------------------------------------------------
WITH w1 AS (
SELECT t4.ord_ym ,t4.item_cat
,SUM(CASE WHEN t4.shop_id = 'S001' THEN t4.ord_qty_sum END) qty_S001
,SUM(CASE WHEN t4.shop_id = 'S002' THEN t4.ord_qty_sum END) qty_S002
FROM (
SELECT DATE_FORMAT(t1.ord_dtm,'%Y%m') ord_ym
,t1.shop_id
,t3.item_cat
,SUM(t2.ord_qty) ord_qty_sum
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.tr_ord_det t2
ON (t1.ord_no = t2.ord_no)
INNER JOIN startdbmy.ms_item t3
ON (t3.item_id = t2.item_id)
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20230301','%Y%m%d')
AND t1.shop_id IN ('S001','S002')
GROUP BY DATE_FORMAT(t1.ord_dtm,'%Y%m') ,t1.shop_id ,t3.item_cat
ORDER BY DATE_FORMAT(t1.ord_dtm,'%Y%m') ,t1.shop_id ,t3.item_cat
) t4
GROUP BY t4.ord_ym ,t4.item_cat
ORDER BY t4.ord_ym ,t4.item_cat
)
SELECT CASE WHEN GROUPING(t5.ord_ym) = 1 THEN 'Total'
ELSE t5.ord_ym END ord_ym
,CASE WHEN GROUPING(t5.item_cat) = 1 THEN 'Total'
ELSE t5.item_cat END item_cat
,CASE WHEN GROUPING(t5.item_cat) = 1 THEN 'Total'
ELSE (SELECT MAX(x.item_cat_nm) FROM startdbmy.ms_item_cat x WHERE x.item_cat = t5.item_cat)
END item_cat_nm
,SUM(t5.qty_S001) qty_S001
,SUM(t5.qty_S002) qty_S002
FROM w1 t5
GROUP BY t5.ord_ym ,t5.item_cat WITH ROLLUP
ORDER BY t5.ord_ym, t5.item_cat;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-2-6
------------------------------------------------------------------------
WITH w1 AS (
SELECT t3.mbr_gd
,t2.shop_oper_tp
,COUNT(*) ord_cnt
FROM startdbmy.tr_ord t1
INNER JOIN startdbmy.ms_shop t2 ON (t2.shop_id = t1.shop_id)
INNER JOIN startdbmy.ms_mbr t3 ON (t3.mbr_id = t1.mbr_id)
WHERE t1.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND t1.ord_dtm < STR_TO_DATE('20240101','%Y%m%d')
GROUP BY t3.mbr_gd
,t2.shop_oper_tp
)
SELECT CASE WHEN GROUPING(t4.mbr_gd) = 1 THEN 'Total'
ELSE (SELECT max(x.base_cd_nm)
FROM startdbmy.cm_base_cd x
WHERE x.base_cd_dv = 'mbr_gd'
AND x.base_cd = t4.mbr_gd)
END 회원등급
,SUM(CASE WHEN t4.shop_oper_tp = 'FLAG' THEN t4.ord_cnt END) Flagship
,SUM(CASE WHEN t4.shop_oper_tp = 'DRCT' THEN t4.ord_cnt END) Directly
,SUM(CASE WHEN t4.shop_oper_tp = 'DIST' THEN t4.ord_cnt END) Distributor
FROM w1 t4
GROUP BY t4.mbr_gd WITH ROLLUP
ORDER BY GROUPING(t4.mbr_gd) DESC
,CASE WHEN t4.mbr_gd = 'PLAT' THEN 1
WHEN t4.mbr_gd = 'GOLD' THEN 2
WHEN t4.mbr_gd = 'SILV' THEN 3 END;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-3-1
------------------------------------------------------------------------
SELECT t1.base_ymd ord_ymd
,t1.mbr_id
,t1.nick_nm
,IFNULL(t2.ord_amt_sum,0) ord_amt_sum
FROM (
SELECT b.base_ymd ,a.mbr_id ,a.nick_nm
FROM startdbmy.ms_mbr a
CROSS JOIN startdbmy.cm_base_dt b
WHERE a.nick_nm IN ('Air','Wind3')
AND b.base_dt >= STR_TO_DATE('20230101','%Y%m%d')
AND b.base_dt < STR_TO_DATE('20230104','%Y%m%d')
) t1
LEFT OUTER JOIN (
SELECT DATE_FORMAT(c.ord_dtm,'%Y%m%d') ord_ymd ,c.mbr_id
,SUM(c.ord_amt) ord_amt_sum
FROM startdbmy.tr_ord c
WHERE c.ord_dtm >= STR_TO_DATE('20230101','%Y%m%d')
AND c.ord_dtm < STR_TO_DATE('20230104','%Y%m%d')
GROUP BY DATE_FORMAT(c.ord_dtm,'%Y%m%d') ,c.mbr_id
) t2
ON (t2.mbr_id = t1.mbr_id AND t2.ord_ymd = t1.base_ymd)
ORDER BY t1.base_ymd, t1.mbr_id;
------------------------------------------------------------------------
-- BOOSTER QUIZ 10-3-2
------------------------------------------------------------------------
SELECT t1.ym
,IFNULL(t2.shop_open_cnt,0) shop_open_cnt
,IFNULL(t3.mbr_join_cnt,0) mbr_join_cnt
,IFNULL(t4.ord_cnt,0) ord_cnt
FROM (
SELECT DISTINCT DATE_FORMAT(a.base_dt,'%Y%m') ym
FROM startdbmy.cm_base_dt a
WHERE a.base_dt >= STR_TO_DATE('20210401','%Y%m%d')
AND a.base_dt < STR_TO_DATE('20210701','%Y%m%d')
) t1
LEFT OUTER JOIN (
SELECT SUBSTR(b.shop_start_ymd,1,6) ym
,COUNT(*) shop_open_cnt
FROM startdbmy.ms_shop b
WHERE b.shop_start_ymd >= '20210401'
AND b.shop_start_ymd < '20210701'
GROUP BY SUBSTR(b.shop_start_ymd,1,6)
) t2 ON (t2.ym = t1.ym)
LEFT OUTER JOIN (
SELECT DATE_FORMAT(c.join_dtm,'%Y%m') ym
,COUNT(*) mbr_join_cnt
FROM startdbmy.ms_mbr c
WHERE c.join_dtm >= STR_TO_DATE('20210401','%Y%m%d')
AND c.join_dtm < STR_TO_DATE('20210701','%Y%m%d')
GROUP BY DATE_FORMAT(c.join_dtm,'%Y%m')
) t3 ON (t3.ym = t1.ym)
LEFT OUTER JOIN (
SELECT DATE_FORMAT(d.ord_dtm,'%Y%m') ym
,COUNT(*) ord_cnt
FROM startdbmy.tr_ord d
WHERE d.ord_dtm >= STR_TO_DATE('20210401','%Y%m%d')
AND d.ord_dtm < STR_TO_DATE('20210701','%Y%m%d')
GROUP BY DATE_FORMAT(d.ord_dtm,'%Y%m')
) t4 ON (t4.ym = t1.ym)
ORDER BY t1.ym;
SQL
복사