notebook/996eco/ads_996eco_index_box_m.sql

282 lines
7.5 KiB
MySQL
Raw Normal View History

2025-04-30 17:17:09 +08:00
CREATE TABLE datasci.ads_996eco_index_box_m (
index_type text,
data_month text,
is_box text,
act_cnt bigint,
pay_cnt bigint,
pay_amount bigint,
mau bigint,
device_type text,
device_type_new text,
act_num bigint,
reg_count bigint,
);
DELETE FROM datasci.ads_996eco_index_box_m WHERE ds = '${month}';
--
WITH ga AS
(
SELECT id
,name
,bind_game_id
FROM public.gm_apply
WHERE bind_type = 1
AND bind_game_type = 1
)
,box_users AS
(
SELECT user_id
FROM public.ods_newly_account
WHERE appid = 1015
GROUP BY user_id
)
,po AS
(
SELECT appid
,user_id
,amount / 100 AS pay_amount
FROM public.ods_payment_order
WHERE ds BETWEEN '${bizmonth}' AND '${bizdate}'
AND status = 1
)
,aa AS
(
SELECT appid
,user_id
FROM public.ods_active_account
WHERE ds BETWEEN '${bizmonth}' AND '${bizdate}'
)
INSERT INTO
datasci.ads_996eco_index_box_m (index_type,data_month,is_box,act_cnt,pay_cnt,pay_amount)
SELECT 'pay' AS index_type
,'${month}' data_month
,t1.is_box
,t1.act_cnt
,t2.pay_cnt
,t2.pay_amount
FROM (
SELECT CASE WHEN bu.user_id IS NOT NULL THEN '盒子'
ELSE '非盒子'
END AS is_box
,UNIQ(aa.user_id) AS act_cnt
FROM aa
INNER JOIN ga
ON aa.appid = ga.id
LEFT JOIN box_users bu
ON bu.user_id = aa.user_id
GROUP BY 1
) t1
LEFT JOIN (
SELECT CASE WHEN bu.user_id IS NOT NULL THEN '盒子'
ELSE '非盒子'
END AS is_box
,UNIQ(po.user_id) AS pay_cnt
,SUM(po.pay_amount) AS pay_amount
FROM po
INNER JOIN ga
ON po.appid = ga.id
LEFT JOIN box_users bu
ON bu.user_id = po.user_id
GROUP BY 1
) t2
ON t1.is_box = t2.is_box
;
-- mau
WITH game_apply AS
(
SELECT id
,name
,bind_game_id
FROM public.gm_apply
WHERE bind_game_type = 1
)
INSERT INTO
datasci.ads_996eco_index_box_m (index_type,data_month,is_box,mau)
SELECT 'mau' index_type
,'${month}' data_month
,CASE WHEN grouping(user_flag) = 0 THEN user_flag
ELSE '总计'
END AS is_box
,uniq(user_id) AS mau
FROM (
SELECT CASE WHEN t1.channel LIKE '%996box%' THEN '盒子'
ELSE '非盒子'
END AS user_flag
,user_id
FROM public.ods_active_account t1
INNER JOIN game_apply t2
ON t1.appid = t2.id
WHERE t1.ds BETWEEN '${hisdate}' AND '${bizdate}'
) t
GROUP BY user_flag
;
-- mau-device
WITH game_apply AS
(
SELECT id
,name
,bind_game_id
FROM public.gm_apply
WHERE bind_game_type = 1
)
INSERT INTO
datasci.ads_996eco_index_box_m (index_type,data_month,is_box,device_type,device_type_new,act_num)
SELECT 'mau-device' index_type
,'${month}' AS data_month
,CASE WHEN t1.channel LIKE '%996box%' THEN '盒子'
ELSE '非盒子'
END AS is_box
,t1.device_type
,CASE WHEN lower(t1.device_type) LIKE '%h5%' THEN 'H5'
WHEN lower(t1.device_type) LIKE '%pc%' THEN 'PC'
WHEN lower(t1.device_type) LIKE '%ios%' THEN 'IOS'
ELSE t1.device_type
END AS device_type_new
,uniq(user_id) AS act_num
FROM public.ods_active_account t1
INNER JOIN game_apply t2
ON t1.appid = t2.id
WHERE t1.ds BETWEEN '${hisdate}' AND '${bizdate}'
GROUP BY 1,2,3,4
;
-- reg
WITH legend_apps AS
(
SELECT id AS appid
FROM gm_apply
WHERE bind_game_type = 1
AND bind_type = 1 -- 默认应用
)
---
,tmp_ods_newly_account AS
(
SELECT *
FROM ods_newly_account
WHERE ds BETWEEN '${hisdate}' AND '${bizdate}'
)
,box_users AS
(
SELECT user_id
FROM tmp_ods_newly_account
WHERE appid = 1015
OR channel ~ '996box'
OR channel IN (
SELECT value AS channel
FROM public.dws_app_props
WHERE appid = 1015
AND prop = 2
)
GROUP BY user_id
)
-- 筛选出有盒子记录以及玩过传奇游戏的玩家
,box_users_with_legend AS
(
SELECT acc.user_id
FROM tmp_ods_newly_account acc
WHERE
EXISTS(
SELECT 1
FROM legend_apps app
WHERE acc.appid = app.appid
)
AND
EXISTS(
SELECT 1
FROM box_users box
WHERE box.user_id = acc.user_id
)
)
,reg_account AS
(
-- 普通用户的传奇记录
SELECT acc.gmid
,acc.appid
,acc.channel
,acc.user_id
,acc.device_type
,acc.event_time
,acc.ds
,'非盒子用户' AS user_flag --
,'0' AS sub_channel
FROM tmp_ods_newly_account acc
WHERE
EXISTS(
SELECT 1
FROM legend_apps app
WHERE app.appid = acc.appid
)
AND NOT
EXISTS(
SELECT 1
FROM box_users box
WHERE box.user_id = acc.user_id
)
UNION ALL -- 盒子用户玩过传奇的全量记录
SELECT acc.gmid
,acc.appid
,CASE WHEN bxchl.channel_desc IS NOT NULL THEN bxchl.channel_desc
ELSE acc.channel
END AS channel
,acc.user_id
,acc.device_type
,acc.event_time
,acc.ds
,'盒子用户' AS user_flag ---
,bxchl.channel_desc AS sub_channel
FROM tmp_ods_newly_account acc
LEFT JOIN (
SELECT appid
,value AS channel
,ext AS channel_desc
FROM public.dws_app_props
WHERE appid = 1015
AND prop = 2 -- and length(ext)>0
) bxchl
ON acc.appid = bxchl.appid
AND acc.channel = bxchl.channel
WHERE
EXISTS(
SELECT 1
FROM box_users_with_legend b
WHERE b.user_id = acc.user_id
)
)
INSERT INTO
datasci.ads_996eco_index_box_m (index_type,data_month,is_box,reg_count)
SELECT 'reg' index_type
,'${month}' AS data_month
,CASE WHEN user_flag = '非盒子用户' THEN '非盒子注册用户'
WHEN user_flag = '盒子用户'
AND (appid = 1015
OR channel ~ '996box'
OR sub_channel IS NOT NULL) THEN '盒子注册用户'
ELSE '非盒子注册用户'
END AS is_box
,uniq(mi.user_id) AS reg_count
FROM reg_account acc
INNER JOIN (
SELECT user_id
,MIN(event_time) AS event_time_min
FROM reg_account
GROUP BY user_id
) mi ---
ON acc.user_id = mi.user_id
AND acc.event_time = mi.event_time_min
GROUP BY 1
,2
,3
;