notebook/996eco/ads_996eco_index_role_m.sql
2025-04-30 17:17:09 +08:00

177 lines
6.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

CREATE TABLE datasci.ads_996eco_index_role_m (
index_type text,
data_month text,
tg_play text,
tg_ver text,
tg_value text,
tg_job text,
tg_feature text,
act_num bigint,
acc_count bigint,
pay_cnt bigint,
pay_amount bigint,
);
DELETE FROM datasci.ads_996eco_index_channel_m WHERE ds = '${month}';
INSERT INTO
datasci.ads_996eco_index_role_m (index_type,data_month,tg_play,tg_ver,tg_value,tg_job,tg_feature,act_num)
select
'mau' index_type,
'${month}' AS data_month,
tg_play.tag as tg_play,tg_ver.tag as tg_ver,tg_value.tag as tg_value,tg_job.tag as tg_job,tg_feature.tag as tg_feature,
uniq(user_id) as act_num
from public.ods_active_account t1
inner join
(
select id,name,bind_game_id
from public.gm_apply
where bind_game_type=1
) t2 on t1.appid=t2.id
left outer join
(select game_id,tag from public.game_tags where tag in ('神器','复古','沉默','火龙','合击','迷失','小极品','大极品','二合一','铭文','冰雪','宠物','战神','暗黑','元素','忘忧','BUFF','天罡'))tg_play
on t2.bind_game_id=tg_play.game_id
left outer join
(select game_id,tag from public.game_tags where tag in ('1.70','1.76','1.80','1.85','1.95'))tg_ver
on t2.bind_game_id=tg_ver.game_id
left outer join
(select game_id,tag from public.game_tags where tag in ('经典','微变','中变','超变'))tg_value
on t2.bind_game_id=tg_value.game_id
left outer join
(select game_id,tag from public.game_tags where tag in ('单职业','三职业','多职业'))tg_job
on t2.bind_game_id=tg_job.game_id
left outer join
(select game_id,tag from public.game_tags where tag in ('3D','开服1年','开服2年','开服3年','开服4年'))tg_feature
on t2.bind_game_id=tg_feature.game_id
where t1.ds BETWEEN '${hisdate}' AND '${bizdate}'
group by
1,2,3,4,5,6,7
;
-- reg
INSERT INTO
datasci.ads_996eco_index_role_m (index_type,data_month,tg_play,acc_count)
select
'reg' index_type,
'${month}' AS data_month,
case when tg_play.tag is null then '未知' else tg_play.tag end as tg_play,
uniq(mi.user_id) as acc_count
from public.ods_newly_account acc
inner join (select user_id,min(event_time) as event_time_min
from public.ods_newly_account acc
inner join (select * from public.gm_apply
WHERE bind_game_type = 1 -- 传奇游戏
) app
on acc.appid=app.id
group by user_id
) mi ---从玩家的众多游戏记录中选取最早的一条
on acc.user_id=mi.user_id and acc.event_time=mi.event_time_min
inner join (SELECT id as app_id,
name as app_name,
bind_game_id,
bind_game_type ---1 :传奇游戏 , 2:传世 , 3传3
FROM public.gm_apply
WHERE bind_type = 1 -- 默认应用
-- AND bind_game_type = 1 -- 传奇游戏
) gm
on acc.appid=gm.app_id
left outer join
(select game_id,tag from public.game_tags where tag in ('神器','复古','沉默','火龙','合击','迷失','小极品','大极品','二合一','铭文','冰雪','宠物','战神','暗黑','元素','忘忧','BUFF','天罡'))tg_play
on gm.bind_game_id=tg_play.game_id
where acc.ds BETWEEN '${hisdate}' AND '${bizdate}'
group by 1,2,3
;
--付费人数和金额
WITH ga AS (
SELECT
id,
bind_game_id
FROM public.gm_apply
WHERE bind_type = 1 AND bind_game_type = 1
),
tg AS (
SELECT
game_id,
string_agg(DISTINCT CASE WHEN tag in ('神器','复古','沉默','火龙','合击','迷失','小极品','大极品','二合一','铭文','冰雪','宠物','战神','暗黑','元素','忘忧','BUFF','天罡') THEN tag ELSE NULL END,',') AS tg_play,
string_agg(DISTINCT CASE WHEN tag in ('1.70','1.76','1.80','1.85','1.95')THEN tag ELSE NULL END, ',') AS ver_tag,
string_agg(DISTINCT CASE WHEN tag in ('经典','微变','中变','超变') THEN tag ELSE NULL END,',') AS value_tag,
string_agg(DISTINCT CASE WHEN tag in ('单职业','三职业','多职业') THEN tag ELSE NULL END,',') AS job_tag,
string_agg(DISTINCT CASE WHEN tag in ('3D','开服1年','开服2年','开服3年','开服4年') THEN tag ELSE NULL END,',') AS feature_tag
FROM public.game_tags
GROUP BY game_id
),
po AS (
SELECT
appid,
ds,
user_id,
SUM(amount) AS pay_amount
FROM public.ods_payment_order
WHERE status = 1
AND ds::date BETWEEN '${hisdate}' AND '${bizdate}'
GROUP BY 1, 2, 3
)
INSERT INTO
datasci.ads_996eco_index_role_m (index_type,data_month,tg_play,pay_cnt,pay_amount)
SELECT
'pay' index_type,
'${month}' AS data_month,
tg.tg_play,
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
tg ON ga.bind_game_id = tg.game_id
GROUP BY 1,2,3
;
--月活跃人数
WITH ga AS (
SELECT
id,
bind_game_id
FROM public.gm_apply
WHERE bind_type = 1 AND bind_game_type = 1
),
tg AS (
SELECT
game_id,
string_agg(DISTINCT CASE WHEN tag in ('神器','复古','沉默','火龙','合击','迷失','小极品','大极品','二合一','铭文','冰雪','宠物','战神','暗黑','元素','忘忧','BUFF','天罡') THEN tag ELSE NULL END,',') AS tg_play,
string_agg(DISTINCT CASE WHEN tag in ('1.70','1.76','1.80','1.85','1.95')THEN tag ELSE NULL END, ',') AS ver_tag,
string_agg(DISTINCT CASE WHEN tag in ('经典','微变','中变','超变') THEN tag ELSE NULL END,',') AS value_tag,
string_agg(DISTINCT CASE WHEN tag in ('单职业','三职业','多职业') THEN tag ELSE NULL END,',') AS job_tag,
string_agg(DISTINCT CASE WHEN tag in ('3D','开服1年','开服2年','开服3年','开服4年') THEN tag ELSE NULL END,',') AS feature_tag
FROM public.game_tags
GROUP BY game_id
),
aa AS (
SELECT
appid,
ds,
user_id
FROM public.ods_active_account
WHERE ds BETWEEN '${hisdate}' AND '${bizdate}'
GROUP BY 1, 2, 3
)
INSERT INTO
datasci.ads_996eco_index_role_m (index_type,data_month,tg_play,acc_count)
SELECT
'tg-mau' index_type,
'${month}' AS data_month,
tg.tg_play,
UNIQ(aa.user_id) AS acc_count
FROM aa
INNER JOIN
ga ON aa.appid = ga.id
LEFT JOIN
tg ON ga.bind_game_id = tg.game_id
GROUP BY 1,2,3
;