282 lines
7.5 KiB
MySQL
282 lines
7.5 KiB
MySQL
|
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
|
||
|
;
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|