1.新手漏斗
SELECT a.pt as 日期, count(DISTINCT a.device_id) as 新增激活用戶, round(sum(g1)/count(DISTINCT a.device_id), 3) as 成功進入游戲曝光, round(sum(if(game_level>=1, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第一關, round(sum(g2)/count(DISTINCT a.device_id), 3) as 1元彈框紅包彈框曝光, round(sum(g3)/count(DISTINCT a.device_id), 3) as 游戲頁一元紅包點擊, round(sum(g4)/count(DISTINCT a.device_id), 3) as 領取第一關獎勵點擊, round(sum(if(game_level>=2, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第二關, round(sum(if(game_level>=3, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第三關, round(sum(if(game_level>=4, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第四關, round(sum(if(game_level>=5, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第五關, round(sum(if(game_level>=6, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第六關, round(sum(if(game_level>=9, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第九關, round(sum(if(game_level>=10, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第10關, round(sum(if(game_level>=15, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第15關, round(sum(if(game_level>=20, 1, 0))/count(DISTINCT a.device_id), 3) as 通過第20關, round(sum(g5)/count(DISTINCT a.device_id), 3) as 第五關活動機會曝光, round(count(DISTINCT wx_open_id)/count(DISTINCT a.device_id), 3) as 微信登錄, round(count(DISTINCT id_card)/count(DISTINCT a.device_id), 3) as 身份證綁定, round(sum(if(COALESCE(money, 0)>0, 1,0))/count(DISTINCT a.device_id), 3) as 提現成功 from ( SELECT if(Sort_array(guide)[size(guide)-1] >=1, 1, 0) as g1, if(Sort_array(guide)[size(guide)-1] >= 2, 1, 0) as g2, if(Sort_array(guide)[size(guide)-1] >=3, 1, 0) as g3, if(Sort_array(guide)[size(guide)-1] >=4, 1, 0) as g4, if(Sort_array(guide)[size(guide)-1] >= 5, 1, 0) as g5, device_id, wx_open_id, pt, id_card from sync_mongo_box.extract_hztt_app_source__userinfo WHERE pt BETWEEN '${start}' and '${end}' AND SUBSTR(create_time,1,10) = pt ) as a LEFT JOIN ( select device_id, tg_num as game_level, pt from sync_mongo_box.extract_hztt_app_source__userdaystat WHERE pt BETWEEN '${start}' and '${end}' and tg_num >= 1 ) as c on a.device_id = c.device_id and a.pt=c.pt LEFT JOIN ( SELECT sum(COALESCE(money, 0)) as money, device_id, pt FROM sync_mongo_box.extract_hztt_app_source__extractcashrecord WHERE pt BETWEEN '${start}' and '${end}' AND status = 3 GROUP by device_id, pt ) as b on a.device_id = b.device_id and a.pt = b.pt group by a.pt;
推人游戲啟動漏斗
with a as( select device_id,pt from sync_mongo_box.extract_trmoney_app_source__userinfo WHERE pt BETWEEN '${start}' and '${end}' AND SUBSTR(create_time,1,10) = '${end}' and create_time >="2020-02-26 19:00" GROUP by device_id,pt -- 新增表 ), b as( select device_id,ngx_date,act_page,event_name from liquid_log_project.log_trmoney_android where ngx_date BETWEEN '${start}' and '${end}' and ngx_date_time >="2020-02-26 19:00" ) SELECT b.ngx_date, count( distinct if(event_name="b_entry_page" and act_page = "p_welcome", a.device_id, null)) 進入loading頁的用戶, count( distinct if(event_name="b_click_enter", device_id, null)) 同意隱私協議的用戶, count( distinct if(event_name="b_game_plugin_install_already", device_id, null)) 插件安裝成功的用戶, count( distinct if(event_name="b_entry_page" and act_page= "p_home_activity", device_id, null)) 成功進入app首頁的用戶, count( distinct if(event_name="b_click_game_start", device_id, null)) 點擊開始游戲的用戶, count( distinct if((event_name="b_entey_page" and act_page = "b_game_plugin_init") or event_name = "b_game_plugin_init", device_id, null)) 開始啟動插件的用戶, count( distinct if(event_name="b_entry_page" and act_page="p_game_plugin", device_id, null)) 成功進入插件游戲的用戶 from a LEFT join b on a.device_id = b.device_id and a.pt = b.ngx_date GROUP by b.ngx_date;
游戲加載時長是否成功進入app
--odps sql --********************************************************************-- --author:odps-game --create time:2020-02-25 17:50:12 --********************************************************************-- --推人游戲加載時長&&是否成功進入app with a as( select device_id,pt from sync_mongo_box.extract_trmoney_app_source__userinfo WHERE pt BETWEEN '${start}' and '${end}' AND SUBSTR(create_time,1,10) = pt GROUP by device_id,pt -- 新增表 ), b as( -- p_welcome p_splash select * from (select duration,device_id,ngx_date ,row_number()OVER(PARTITION by device_id,ngx_date order by ngx_date_time asc,duration DESC ) rn from liquid_log_project.log_trmoney_android where ngx_date BETWEEN '${start}' and '${end}' and event_name ="b_leave_page" and act_page = "p_welcome" ) a where rn=1-- 首次啟動時長 duration -- 一個人有多條只取時間最小的那一條 ), c as ( select device_id,ngx_date from liquid_log_project.log_trmoney_android where ngx_date BETWEEN '${start}' and '${end}' and event_name ="b_entry_page" and act_page = "p_home_activity" GROUP by device_id,ngx_date -- 成功進入app ) SELECT a.pt,a.device_id,b.duration,if(c.device_id is not null ,1,0) isin -- 日期、device_id、啟動時長、是否進入app from a LEFT join b on a.device_id = b.device_id and a.pt = b.ngx_date LEFT join c on a.device_id = c.device_id and a.pt = c.ngx_date;
LTV 模版
--odps sql --********************************************************************-- --author:odps-game --create time:2019-11-21 10:42:43 --********************************************************************-- with new as ( --新增 SELECT user_id ,pt FROM basic_data_center.odps_base_box_user_day_stat WHERE pt BETWEEN '${bdatestart}' AND '${bdateend}' AND day_age = 0 and version_name='5.4.9.0' ) ,stat as (--活躍加三天 SELECT user_id ,pt ,duration FROM basic_data_center.odps_base_box_user_day_stat WHERE pt BETWEEN '${bdatestart}' AND SUBSTR(DATEADD(TO_DATE('${bdateend}','yyyy-mm-dd'),3,'dd'),1,10) ) SELECT new.pt AS 日期 ,CASE WHEN basic_data_center.getbucketid(new.user_id,18) BETWEEN 0 AND 49 THEN 'A' WHEN basic_data_center.getbucketid(new.user_id,18) BETWEEN 50 AND 99 THEN 'B' END AS 策略 ,sum(if(DATEDIFF(to_date(stat.pt,'yyyy-mm-dd'),to_date(new.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) as 新增人數 ,sum(if(DATEDIFF(to_date(stat.pt,'yyyy-mm-dd'),to_date(new.pt,'yyyy-mm-dd'),'dd')=0,duration,0 )) as 當天新增人數的總時長 ,sum(if(DATEDIFF(to_date(stat.pt,'yyyy-mm-dd'),to_date(new.pt,'yyyy-mm-dd'),'dd')BETWEEN 0 and 1,duration,0 )) as `當天新增人數2日內時長(當天和第二天)` ,sum(if(DATEDIFF(to_date(stat.pt,'yyyy-mm-dd'),to_date(new.pt,'yyyy-mm-dd'),'dd')=2,duration,0 )) as `當天新增人數的+2天總時長` ,sum(if(DATEDIFF(to_date(stat.pt,'yyyy-mm-dd'),to_date(new.pt,'yyyy-mm-dd'),'dd')=3,duration,0 )) as `當天新增人數的+3天總時長` FROM new ,stat WHERE new.user_id = stat.user_id GROUP BY new.pt ,CASE WHEN basic_data_center.getbucketid(new.user_id,18) BETWEEN 0 AND 49 THEN 'A' WHEN basic_data_center.getbucketid(new.user_id,18) BETWEEN 50 AND 99 THEN 'B' END ;
寶箱新增LTV
with data0 as( select pt,device_id FROM basic_data_center.extract_ttgame_extra_app_source__userdaystat WHERE pt between '${date_start}' AND '${date_end}' and day_age = 0 ), data1 as( select pt,device_id , SUM(COALESCE(reward_coin, 0)) as total_reward, SUM(COALESCE(total_video_count, 0)) as video_count ,SUM(COALESCE(cg_game_time, 0)) as game_time FROM basic_data_center.extract_ttgame_extra_app_source__userdaystat WHERE pt between '${date_start}' AND SUBSTR(DATEADD(TO_DATE('${date_end}','yyyy-mm-dd'),7,'dd'),1,10) GROUP BY pt,device_id ), data2 as ( SELECT device_id,sum(COALESCE(money, 0)) as money, pt FROM basic_data_center.extract_ttgame_extra_app_source__extractcashrecord WHERE pt between '${date_start}' AND SUBSTR(DATEADD(TO_DATE('${date_end}','yyyy-mm-dd'),7,'dd'),1,10) AND status = 3 GROUP by pt,device_id ),all_data as ( SELECT data1.pt, data1.device_id,total_reward,video_count ,game_time,money from data1 LEFT join data2 on data1.device_id = data2.device_id and data1.pt = data2.pt ) SELECT data0.pt ,sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) as 新增總人數 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,game_time,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) /60 ,3 )as 新增人均時長 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,video_count,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 )as 新增人均視頻數 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,total_reward,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 )as 新增人均名義補貼 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,money,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 )as 新增人均體現金額 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,game_time,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) /60 ,3 )as 3日人均時長 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,video_count,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 )as 3日人均視頻數 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,total_reward,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 )as 3日人均名義補貼 ,round( sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,money,0 )) / sum(if(DATEDIFF(to_date(all_data.pt,'yyyy-mm-dd'),to_date(data0.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 )as 3日人均提現金額 FROM data0 ,all_data WHERE data0.device_id = all_data.device_id GROUP BY data0.pt;
頁面滲透統計
--odps sql --********************************************************************-- --author:odps-game --create time:2019-11-14 12:08:37 --********************************************************************-- with a as ( SELECT user_id AS day_active_person ,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_index" GROUP BY ngx_date,user_id ),sign_num as ( SELECT user_id AS sign_num_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_signIn" GROUP BY ngx_date,user_id ) ,task_list as ( SELECT user_id AS task_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_taskList" GROUP BY ngx_date,user_id ) ,activity_list as ( SELECT user_id AS activity_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_activityList" GROUP BY ngx_date,user_id ) ,p_lottery as ( SELECT user_id AS p_lottery_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_lottery" GROUP BY ngx_date,user_id ),p_carveup as ( SELECT user_id AS p_carveup_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_carveUp" GROUP BY ngx_date,user_id ),mingame_chooseroom as ( SELECT user_id AS chooseroom_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_chooseRoom" GROUP BY ngx_date,user_id ),mingame_matchgame as ( SELECT user_id AS p_matchgame_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_matchGame" GROUP BY ngx_date,user_id ),mingame_p_game_list as ( SELECT user_id AS p_game_list_user_id,ngx_date AS pt FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name = "h_enter_page" and act_page = "p_gameList" GROUP BY ngx_date,user_id ) select a.pt as date,count(DISTINCT day_active_person) as all_person, --日活 count(DISTINCT sign_num_user_id) as sign_person_num, --打卡人數 count(DISTINCT task_user_id) as task_person_num,--任務賺幣人數 count(DISTINCT activity_user_id) as activity_person_num, --活動送幣人數 count(DISTINCT p_lottery_user_id) as activity_person_jq_num, --活動送幣獎券人數 count(DISTINCT p_carveup_user_id) as carveup_person_num, --瓜分百萬人數 count(DISTINCT chooseroom_user_id) as mingame_chooseroom, --小游戲選擇房間人數 count(DISTINCT p_matchgame_user_id) as mingame_matchgame, --小游戲匹配人數 count(DISTINCT p_game_list_user_id) as mingame__game_list --小游戲游戲列表人數 from a LEFT join sign_num on a.day_active_person = sign_num.sign_num_user_id and a.pt= sign_num.pt LEFT join task_list on a.day_active_person = task_list.task_user_id and a.pt= task_list.pt LEFT join activity_list on a.day_active_person = activity_list.activity_user_id and a.pt= activity_list.pt LEFT join p_lottery on a.day_active_person = p_lottery.p_lottery_user_id and a.pt= p_lottery.pt LEFT join p_carveup on a.day_active_person = p_carveup.p_carveup_user_id and a.pt= p_carveup.pt LEFT join mingame_chooseroom on a.day_active_person = mingame_chooseroom.chooseroom_user_id and a.pt= mingame_chooseroom.pt LEFT join mingame_matchgame on a.day_active_person = mingame_matchgame.p_matchgame_user_id and a.pt= mingame_matchgame.pt LEFT join mingame_p_game_list on a.day_active_person = mingame_p_game_list.p_game_list_user_id and a.pt= mingame_p_game_list.pt GROUP by a.pt;
各項時長統計
--odps sql --********************************************************************-- --author:zhaoyingjie --create time:2019-11-01 10:39:36 --********************************************************************-- with games as ( --人均時長 select COUNT(a.user_id) AS new_add_nums,sum(game_times) as all_game_times, a.pt FROM ( SELECT pt,_id as user_id from sync_mongo_box.extract_box_gamezone_source__userdetails WHERE pt='${date}' and substr(create_time, 1, 10)='${date}' GROUP BY _id,pt ) as a LEFT JOIN ( SELECT pt,user_id ,SUM( COALESCE(game_duration,0) --小游戲時長 + COALESCE(huangdi_time,0) --皇帝時長 + COALESCE(fishing_time,0) -- 捕魚時長 + COALESCE(ddz_times,0) --斗地主時長 + COALESCE(game_activity_cg_time,0) -- 闖關時長 + COALESCE(majiang_times,0) -- 麻將時長 ) AS game_times FROM sync_mongo_box.extract_box_gamezone_game_source__gamedaystat WHERE pt = '${date}' GROUP BY pt,user_id )as b on a.user_id = b.user_id and a.pt = b.pt GROUP BY a.pt ) ,pingtai as ( --人均平台時長 select COUNT(a.user_id) AS new_add_nums,sum(total_playtime) as all_pingtai_times, a.pt FROM ( SELECT pt,_id as user_id from sync_mongo_box.extract_box_gamezone_source__userdetails WHERE pt='${date}' and substr(create_time, 1, 10)='${date}' GROUP BY _id,pt ) as a LEFT JOIN ( SELECT user_id,ngx_date,round((SUM(duration)/1000), 2) as total_playtime FROM liquid_log_project.log_box_android_master WHERE ngx_date = '${date}' AND event_name='b_leave_page' AND SUBSTR(target_url,1,56) = 'https://saiyan_game_center.liquidnetwork.com/game_center' AND duration < 3600000 and duration > 0 and user_id in ( SELECT user_id FROM sync_mongo_box.extract_box_gamezone_source__userdaystat WHERE pt= '${date}' )GROUP by user_id,ngx_date )as b on a.user_id = b.user_id and a.pt = b.ngx_date GROUP BY a.pt ), game_times as ( select a.pt, COUNT(if(ddz_times is null,null,a.user_id)) AS ddz_nums,--斗地主人數 COUNT(if(majiang_times is null,null,a.user_id)) AS mj_nums, --麻將人數 COUNT(if(game_duration ==0,null,a.user_id)) AS mingame_nums, --小游戲人數 COUNT(if(huangdi_time is null,null,a.user_id)) AS huangdi_time_nums, --皇帝人數 COUNT(if(fishing_time is null,null,a.user_id)) AS fishing_time_nums, --捕魚人數 COUNT(if(game_activity_cg_time is null,null,a.user_id)) AS game_activity_cg_nums, --闖關人數 round(sum(if(ddz_times is null,0,ddz_times)) /COUNT(if(ddz_times is null,null,a.user_id))/ 60,2) as avge_ddz_times, --斗地主人均時長 round(sum(if(majiang_times is null,0,majiang_times)) /COUNT(if(majiang_times is null,null,a.user_id))/ 60,2) as avge_majiang_times, --麻將人均時長 round(sum(if(game_duration==0,0,game_duration)) /COUNT(if(game_duration==0,null,a.user_id))/ 60,2) as avge_mingame_times, --小游戲人均時長 round(sum(if(huangdi_time is null,0,huangdi_time)) /COUNT(if(huangdi_time is null,null,a.user_id))/ 60,2) as avge_huangdi_times, --皇帝人均時長 round(sum(if(fishing_time is null,0,fishing_time)) /COUNT(if(fishing_time is null,null,a.user_id))/ 60,2) as avge_fishing_times, --捕魚人均時長 round(sum(if(game_activity_cg_time is null,0,game_activity_cg_time)) /COUNT(if(game_activity_cg_time is null,null,a.user_id))/ 60,2) as avge_game_activity_times --捕魚人均時長 FROM ( SELECT pt,_id as user_id from sync_mongo_box.extract_box_gamezone_source__userdetails WHERE pt='${date}' and substr(create_time, 1, 10)='${date}' ) as a LEFT JOIN ( SELECT pt,user_id, ddz_times ,fishing_time, majiang_times, game_duration, huangdi_time,game_activity_cg_time FROM sync_mongo_box.extract_box_gamezone_game_source__gamedaystat WHERE pt = '${date}' )as b on a.user_id = b.user_id GROUP BY a.pt ) SELECT games.pt,games.new_add_nums,ROUND((all_game_times+all_pingtai_times) / games.new_add_nums,2) as avge_times,ROUND(all_game_times/games.new_add_nums,2) as avge_game_times, avge_ddz_times,avge_majiang_times,avge_fishing_times,avge_huangdi_times ,ROUND(mingame_nums/games.new_add_nums,3) as shentou_mingame ,ROUND(ddz_nums/games.new_add_nums,3) as shentou_ddz ,ROUND(mj_nums/games.new_add_nums,3) as shentou_mj,ROUND(fishing_time_nums/games.new_add_nums,3) as shentou_fishing ,ROUND(huangdi_time_nums/games.new_add_nums,3) as shentou_huangdi ,ROUND(game_activity_cg_nums/games.new_add_nums,3) as shentou_game_activity from games,pingtai,game_times where games.pt = pingtai.pt and games.pt = game_times.pt
專區ROI
--odps sql --********************************************************************-- --author:odps-game --create time:2019-11-18 20:04:53 --********************************************************************-- with a as ( -- 平台獎勵 SELECT pt,user_id ,SUM( COALESCE(punchcard_a_flash_coin,0) + COALESCE(patchcard_a_flash_coin,0) + COALESCE(dayactivity_a_flash_coin,0) + COALESCE(newperson_a_flash_coin,0) + COALESCE(dailytask_a_flash_coin,0) + COALESCE(gu_a_flash_coin,0) -- 瓜分獎勵 + COALESCE(guc_a_flash_coin,0) -- 瓜分安慰獎勵 + COALESCE(p_a_flash_coin,0) -- 進步獎勵 + COALESCE(pc_a_flash_coin,0) -- 進步安慰獎勵 + COALESCE(agc_a_flash_coin,0) -- 獎券獎勵 + COALESCE(88173991_agc_a_flash_coin,0) --消消樂 + COALESCE(88107542_agc_a_flash_coin,0) --摩登大樓 + COALESCE(88190422_agc_a_flash_coin,0) --爆爆球球 + COALESCE(88111422_agc_a_flash_coin,0) --球別掉 + COALESCE(88165662_agc_a_flash_coin,0) --守護飛飛 + COALESCE(cg_a_flash_coin,0) -- 闖關獎勵獎勵 + COALESCE(giftpackage_0_a_flash_coin, 0) + COALESCE(giftpackage_1_a_flash_coin, 0) + COALESCE(giftpackage_2_a_flash_coin, 0) + COALESCE(giftpackage_3_a_flash_coin, 0) + COALESCE(giftpackage_4_a_flash_coin, 0) + COALESCE(reward_coin,0) + COALESCE(finish_box, 0)*2500 ) AS userdaystat_fishing, SUM(COALESCE(video_count,0)) as patch_card_video FROM sync_mongo_box.extract_box_gamezone_source__userdaystat WHERE pt BETWEEN '${t_start}' and '${t_end}' and client_version >= '5.4.7.0' and basic_data_center.getbucketid(user_id, 5) BETWEEN '${t_num}' and '${e_num}' GROUP BY user_id,pt ) ,b as ( --游戲內獎勵、回收、視頻數、時長 SELECT pt,user_id,SUM( COALESCE(huangdi_task,0) + COALESCE(fishing_game_obtain_flash,0) + COALESCE(reward_coin,0) + COALESCE(a_ddz,0) -- 斗地主獎勵 + COALESCE(mj_task_flash_coin, 0) -- 麻將游戲內獎勵 ) AS gameuserdaystat_fishing ,SUM( + ABS(COALESCE(fishing_game_consum_flash,0)) --- 捕魚回收門票 + ABS(COALESCE(minigame_need_coin,0)) --- 小游戲門票 + ABS(COALESCE(r_ddz,0)) -- 斗地主回收 ) AS consum_flash ,SUM( COALESCE(if (game_duration < 0,0,game_duration),0) + COALESCE(if (huangdi_time < 0,0,huangdi_time),0) + COALESCE(if (fishing_time < 0,0,fishing_time),0) + COALESCE(if (ddz_times < 0,0,ddz_times),0) --斗地主時長 + COALESCE(if (game_activity_cg_time < 0,0,game_activity_cg_time),0) -- 闖關時長 + COALESCE(if (majiang_times < 0,0,majiang_times),0) -- 麻將時長 ) AS game_times ,SUM( COALESCE(total_video_count,0) + COALESCE(fishing_watch_video_times,0) -- 捕魚看視頻數 + COALESCE(ddz_watch_video,0) -- 斗地主看視頻數 + COALESCE(majiang_watch_video, 0) -- 麻將游戲內視頻數 + COALESCE(mj_task_video, 0) -- 麻將任務視頻 ) AS game_video FROM sync_mongo_box.extract_box_gamezone_game_source__gamedaystat WHERE pt BETWEEN '${t_start}' and '${t_end}' GROUP BY pt,user_id ) ,c as( --皇帝視頻數 SELECT user_id,ngx_date,COUNT(1) AS huangdi_video_count FROM liquid_log_project.log_box_android_master WHERE ngx_date BETWEEN '${t_start}' and '${t_end}' AND event_name IN ('task_video_success','speed_video_success','box_video_success','offline_video_success') AND GET_JSON_OBJECT(other_column,'$.game_id') = "42104418" GROUP by user_id,ngx_date ),d as( -- 游戲平台所占時長 SELECT a.user_id,a.ngx_date,round((SUM(duration)/1000), 2) as total_playtime from ( SELECT user_id ,duration ,ngx_date FROM liquid_log_project.log_box_android_master WHERE ngx_date BETWEEN '${t_start}' and '${t_end}' AND event_name = 'b_leave_page' AND SUBSTR(target_url,1,56) = 'https://saiyan_game_center.liquidnetwork.com/game_center' AND duration < 3600000 AND duration > 0 )a LEFT SEMI JOIN ( SELECT user_id ,pt FROM sync_mongo_box.extract_box_gamezone_source__userdaystat WHERE pt BETWEEN '${t_start}' and '${t_end}' GROUP BY pt,user_id ) b on a.user_id=b.user_id and a.ngx_date=b.pt GROUP BY a.ngx_date,a.user_id ),f as ( --轉圈獎勵 SELECT user_id,pt,SUM(COALESCE(red_envelopes_game_module_flash,0)) as red_game_flash, --游戲專區轉圈 SUM(COALESCE(red_envelopes_doudizhu_flash,0)) as doudizhu_flash, -- 首頁斗地主轉圈 SUM(COALESCE(third_order_flash_saiyisai,0)) red_zq, --紅包新游戲中心 轉圈 SUM(COALESCE(games_reward_flash,0)) games_reward_flash, --游戲激勵視頻獎勵 SUM(COALESCE(games_read_count_reward,0)) games_read_count_reward, --游戲轉圈階梯獎勵 SUM(COALESCE(size(games_red_reward_y_list),0)) games_red_video_count --游戲轉圈視頻數 from sync_mongo_box.extract_source__userdaystat where pt BETWEEN '${t_start}' and '${t_end}' GROUP BY user_id,pt ) select '${t_num}' "--" '${e_num}' as 桶號, a.pt,COUNT(a.user_id) AS 日活, --日活 SUM(red_game_flash) as 轉圈獎勵, --轉圈獎勵 ROUND((SUM(red_game_flash + doudizhu_flash + games_reward_flash + games_read_count_reward)) / COUNT(a.user_id)) as 人均轉圈補貼, --人均轉圈補貼 SUM(userdaystat_fishing+gameuserdaystat_fishing + red_game_flash + doudizhu_flash +red_zq + games_reward_flash + games_read_count_reward) AS 補貼閃電幣, --補貼閃電幣 ROUND( SUM(userdaystat_fishing+gameuserdaystat_fishing + red_game_flash + doudizhu_flash +red_zq + games_reward_flash +games_read_count_reward - consum_flash) / COUNT(a.user_id) ) as 人均補貼, --人均補貼 SUM(consum_flash) AS 回收閃電幣, --回收閃電幣 SUM(game_times) +SUM(total_playtime) AS 總時長, --總時長 ROUND( ( (SUM(game_times) + SUM(total_playtime)) / COUNT(a.user_id) / 60 ) ,2) as 人均總時長, --人均總時長 SUM(game_times) AS 游戲時長, --游戲時長 ROUND( (SUM(game_times) / COUNT(a.user_id)) / 60 ,2) as 人均游戲時長, --人均游戲時長 SUM(game_video) + sum(huangdi_video_count) +sum(patch_card_video) + sum(games_red_video_count) AS 視頻數, --視頻數 ROUND( (SUM(game_video) + sum(huangdi_video_count) +sum(patch_card_video) + sum(games_red_video_count)) / COUNT(a.user_id) ,2) as 人均視頻數 --人均視頻數 from a LEFT join b on a.user_id = b.user_id and a.pt = b.pt LEFT join c on a.user_id = c.user_id and a.pt = c.ngx_date LEFT JOIN d on a.user_id = d.user_id and a.pt = d.ngx_date LEFT join f on a.user_id = f.user_id and a.pt = f.pt GROUP by a.pt
專區新手任務提現
with user as ( SELECT user_id,pt FROM ( SELECT * from basic_data_center.odps_base_box_user_day_stat WHERE pt BETWEEN '${bdatestart}' and '${bdateend}' and version_name >='5.4.4.5' -- and day_age = 0 --判斷新老用戶 and day_age != 0 --老用戶 )a join ( SELECT pt,user_id FROM sync_mongo_box.extract_box_gamezone_source__userdaystat where day_age=0 and pt BETWEEN '${bdatestart}' and '${bdateend}' )b on a.user_id = b.user_id and a.pt=b.pt GROUP by user_id,pt ) ,duration as ( --full join 保證全部用戶 SELECT COALESCE(a.user_id,b.user_id) AS user_id ,COALESCE(duration,0)+COALESCE(total_playtime,0) AS allduration --兩部分的時長 ,COALESCE(a.pt,b.pt) AS pt FROM ( --第一部分的時長 SELECT user_id ,COALESCE(game_duration,0)+COALESCE(huangdi_time,0)+COALESCE(fishing_time,0)+COALESCE(ddz_times,0)+COALESCE(game_activity_cg_time,0) AS duration ,pt FROM sync_mongo_box.extract_box_gamezone_game_source__gamedaystat WHERE pt BETWEEN '${bdatestart}' AND split_part(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) ) a FULL JOIN ( --游戲中心的時長 SELECT user_id ,ngx_date AS pt ,SUM(duration)/1000 AS total_playtime FROM liquid_log_project.log_box_android_master WHERE ngx_date BETWEEN '${bdatestart}' and split_part(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) AND event_name = 'b_leave_page' AND SUBSTR(target_url,1,56) = 'https://saiyan_game_center.liquidnetwork.com/game_center' AND duration < 3600000 AND duration > 0 AND user_id IN ( SELECT user_id FROM sync_mongo_box.extract_box_gamezone_source__userdaystat WHERE pt BETWEEN '${bdatestart}' AND '${bdateend}' ) GROUP BY user_id ,ngx_date ) b ON a.user_id = b.user_id AND a.pt = b.pt ) ,videos as ( --full join 保證全部用戶 SELECT COALESCE(d.user_id,c.user_id) AS user_id ,COALESCE(videos,0) +COALESCE(games_red_video_count,0) AS allvideos --三者相加的視頻數 ,COALESCE(d.pt,c.pt) AS pt FROM ( SELECT COALESCE(a.user_id,b.user_id) AS user_id ,COALESCE(videos,0) +COALESCE(huangdi_video_count,0) AS videos --皇帝+其他的視頻數 ,COALESCE(a.pt,b.pt) AS pt FROM ( --皇帝視頻數 SELECT user_id ,ngx_date AS pt ,COUNT(1) AS huangdi_video_count FROM liquid_log_project.log_box_android_master WHERE ngx_date BETWEEN '${bdatestart}' AND split_part(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 1,'dd'),' ',1) AND event_name IN ('task_video_success','speed_video_success','box_video_success','offline_video_success') AND GET_JSON_OBJECT(other_column,'$.game_id') = "42104418" GROUP BY user_id ,ngx_date ) a FULL JOIN ( --其他的視頻數 SELECT user_id ,COALESCE(total_video_count,0) +COALESCE(fishing_watch_video_times,0) +COALESCE(ddz_watch_video,0) +COALESCE(majiang_watch_video,0 ) +COALESCE(mj_task_video,0) AS videos ,pt FROM sync_mongo_box.extract_box_gamezone_game_source__gamedaystat WHERE pt BETWEEN '${bdatestart}' AND split_part(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) ) b ON a.user_id = b.user_id AND a.pt = b.pt ) d FULL JOIN ( --補貼表里的視頻數 SELECT user_id ,SUM(COALESCE(SIZE(games_red_reward_y_list),0)) games_red_video_count --游戲轉圈視頻數 ,pt FROM sync_mongo_box.extract_source__userdaystat WHERE pt BETWEEN '${bdatestart}' AND split_part(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) group by user_id,pt ) c ON d.user_id = c.user_id AND d.pt = c.pt ) ,subsidy as ( SELECT COALESCE(a.user_id,b.user_id) AS user_id ,COALESCE(a.subsidy,0)+COALESCE(b.subsidy,0) AS allsubsidy --兩者的補貼 ,COALESCE(a.pt,b.pt) AS pt FROM ( --第一部分的補貼 SELECT user_id ,SUM(red_envelopes_game_module_flash)+SUM(red_envelopes_doudizhu_flash)+SUM(third_order_flash_saiyisai)+SUM(games_reward_flash)+SUM(games_read_count_reward) as subsidy ,pt FROM sync_mongo_box.extract_source__userdaystat WHERE pt BETWEEN '${bdatestart}' AND split_part(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) group by user_id,pt ) a FULL JOIN ( --第二部分的補貼 SELECT COALESCE(a.user_id,b.user_id) AS user_id ,COALESCE(a.subsidy,0) +COALESCE(b.subsidy,0) AS subsidy --皇帝+其他的視頻數 ,COALESCE(a.pt,b.pt) AS pt FROM ( SELECT user_id ,pt ,COALESCE(huangdi_task,0)+COALESCE(fishing_rank_flash,0)+COALESCE(fishing_game_obtain_flash,0)+COALESCE(reward_coin,0) +COALESCE(a_ddz,0) +COALESCE(mj_task_flash_coin,0)-COALESCE(fishing_game_consum_flash,0)-COALESCE(minigame_need_coin,0) -COALESCE(r_ddz,0) as subsidy FROM sync_mongo_box.extract_box_gamezone_game_source__gamedaystat WHERE pt BETWEEN '${bdatestart}' AND SPLIT_PART(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) ) a FULL JOIN ( --其他的補貼 SELECT user_id ,pt ,COALESCE(punchcard_a_flash_coin,0)+COALESCE(patchcard_a_flash_coin,0)+COALESCE(dayactivity_a_flash_coin,0)+COALESCE(newperson_a_flash_coin,0) +COALESCE(dailytask_a_flash_coin,0) +COALESCE(gu_a_flash_coin,0)+COALESCE(guc_a_flash_coin,0)+COALESCE(p_a_flash_coin,0) +COALESCE(pc_a_flash_coin,0) +COALESCE(agc_a_flash_coin,0) +COALESCE(88173991_agc_a_flash_coin,0)+COALESCE(88107542_agc_a_flash_coin,0)+COALESCE(88190422_agc_a_flash_coin,0) +COALESCE(88111422_agc_a_flash_coin,0) +COALESCE(88165662_agc_a_flash_coin,0) +COALESCE(cg_a_flash_coin,0)+COALESCE(giftpackage_0_a_flash_coin,0)+COALESCE(giftpackage_1_a_flash_coin,0) +COALESCE(giftpackage_2_a_flash_coin,0) +COALESCE(giftpackage_3_a_flash_coin,0) +COALESCE(giftpackage_4_a_flash_coin,0)+COALESCE(reward_coin,0)+COALESCE(finish_box,0)*2500 as subsidy FROM sync_mongo_box.extract_box_gamezone_source__userdaystat WHERE pt BETWEEN '${bdatestart}' AND SPLIT_PART(DATEADD(CONCAT('${bdateend}',' 00:00:00'), 6,'dd'),' ',1) ) b ON a.user_id = b.user_id AND a.pt = b.pt ) b ON a.user_id = b.user_id AND a.pt = b.pt ) ,last_duration as ( SELECT user.pt ,CASE WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 0 AND 84 THEN 'A' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 85 AND 89 THEN 'B' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 90 AND 94 THEN 'C' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 95 AND 99 THEN 'D' ELSE 'E' END AS bucket_type , sum(if(DATEDIFF(to_date(duration.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )=0,1,0)) as newuser --新增人數 , sum(if(DATEDIFF(to_date(duration.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )=0,allduration,0)) as duration0 --當日總時長 , sum(if(DATEDIFF(to_date(duration.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )BETWEEN 0 and 2,allduration,0)) as duration3 --三日內時長 , sum(if(DATEDIFF(to_date(duration.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )BETWEEN 0 and 6,allduration,0)) as duration7 --七日內時長 FROM user LEFT JOIN duration ON user.user_id = duration.user_id GROUP BY user.pt ,CASE WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 0 AND 84 THEN 'A' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 85 AND 89 THEN 'B' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 90 AND 94 THEN 'C' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 95 AND 99 THEN 'D' ELSE 'E' END ) ,last_videos as ( SELECT user.pt ,CASE WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 0 AND 84 THEN 'A' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 85 AND 89 THEN 'B' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 90 AND 94 THEN 'C' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 95 AND 99 THEN 'D' ELSE 'E' END AS bucket_type , sum(if(DATEDIFF(to_date(videos.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )=0,allvideos,0)) as videos0 --當日總時長 , sum(if(DATEDIFF(to_date(videos.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )BETWEEN 0 and 2,allvideos,0)) as videos3 --三日內時長 , sum(if(DATEDIFF(to_date(videos.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )BETWEEN 0 and 6,allvideos,0)) as videos7 --七日內時長 FROM user LEFT JOIN videos ON user.user_id = videos.user_id GROUP BY user.pt ,CASE WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 0 AND 84 THEN 'A' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 85 AND 89 THEN 'B' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 90 AND 94 THEN 'C' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 95 AND 99 THEN 'D' ELSE 'E' END ) ,last_subsidy as ( SELECT user.pt ,CASE WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 0 AND 84 THEN 'A' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 85 AND 89 THEN 'B' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 90 AND 94 THEN 'C' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 95 AND 99 THEN 'D' ELSE 'E' END AS bucket_type , sum(if(DATEDIFF(to_date(subsidy.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )=0,allsubsidy,0)) as subsidy0 --當日總時長 , sum(if(DATEDIFF(to_date(subsidy.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )BETWEEN 0 and 2,allsubsidy,0)) as subsidy3 --三日內時長 , sum(if(DATEDIFF(to_date(subsidy.pt,'yyyy-mm-dd'),TO_DATE(user.pt,'yyyy-mm-dd'),'dd' )BETWEEN 0 and 6,allsubsidy,0)) as subsidy7 --七日內時長 FROM user LEFT JOIN subsidy ON user.user_id = subsidy.user_id GROUP BY user.pt ,CASE WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 0 AND 84 THEN 'A' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 85 AND 89 THEN 'B' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 90 AND 94 THEN 'C' WHEN basic_data_center.getbucketid(user.user_id, 11) BETWEEN 95 AND 99 THEN 'D' ELSE 'E' END ) SELECT last_duration.pt as 日期 ,last_duration.bucket_type as 分桶情況 ,newuser as 新增人數 ,ROUND(duration0/newuser,2)/60 as 當日人均時長分 , ROUND(subsidy0/newuser,2)/100000 as 當日人均補貼元 , ROUND(videos0/newuser,2) as 當日人均視頻數 , ROUND(duration3/newuser,2)/60 as 三日人均時長分 , ROUND(subsidy3/newuser,2)/100000 as 三日人均補貼元 , ROUND(videos3/newuser,2) as 三日人均視頻數 , ROUND(duration7/newuser,2)/60 as 七日人均時長分 , ROUND(subsidy7/newuser,2)/100000 as 七日人均補貼元 , ROUND(videos7 /newuser,2) as 七日人均視頻數 from last_duration,last_videos,last_subsidy WHERE last_duration.pt =last_videos.pt and last_duration.bucket_type =last_videos.bucket_type and last_duration.pt =last_subsidy.pt and last_duration.bucket_type =last_subsidy.bucket_type;
活躍留存模版
--odps sql --********************************************************************-- --author:odps-game --create time:2019-11-21 16:22:46 --********************************************************************-- with user_t as( select pt,user_id from workspace_saiyisai.odps_calc_user_roi where pt between '${date_start}' AND '${date_end}' ), userdaystat as( select pt,user_id from workspace_saiyisai.odps_calc_user_roi where pt between '${date_start}' AND SUBSTR(DATEADD(TO_DATE('${date_end}','yyyy-mm-dd'),14,'dd'),1,10) ) select CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_t.user_id,'8') BETWEEN 0 AND 5 THEN "a" WHEN basic_data_center.getbucketid(user_t.user_id,'8') BETWEEN 6 AND 10 THEN "b" WHEN basic_data_center.getbucketid(user_t.user_id,'8') BETWEEN 6 AND 10 THEN "b" WHEN basic_data_center.getbucketid(user_t.user_id,'8') BETWEEN 6 AND 10 THEN "b" -- 實驗分桶修改 end END AS 策略, user_t.pt as 日期, count(distinct user_t.user_id) 活躍, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 1, 1, 0) ) 留存1, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 3, 1, 0) ) 留存3, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 7, 1, 0) ) 留存7, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 10, 1, 0) ) 留存10, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 14, 1, 0) ) 留存14, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 1, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存1率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 3, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存3率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 7, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存7率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 10, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存10率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 14, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存14率 from user_t LEFT JOIN userdaystat on user_t.user_id = userdaystat.user_id group by user_t.pt, -- 實驗分桶修改 start CASE WHEN basic_data_center.getbucketid(user_t.user_id,'') BETWEEN 0 AND 99 THEN "20-99" -- 實驗分桶修改 end END;
全量ROI模版
-- --odps sql -- --********************************************************************-- -- --author:odps-game -- --create time:2019-11-21 15:50:26 -- --********************************************************************-- select pt, CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 0 AND 9 THEN '跳一跳' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 10 AND 19 THEN '箭頭' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 20 AND 99 THEN '對照組' -- 實驗分桶修改 end END AS 策略, count(1) as 日活,round(sum(video_count) / count(1),2) as 人均視頻數, round(sum(times) / count(1),3) as 人均時長,round(sum(max_flash_coin + red_coin) / count(1),3) as 人均補貼, round(sum(income) / count(1),3) as 人均收入,ROUND(sum(possible_reward) / count(1),3) as 人均可提補貼 from workspace_saiyisai.odps_calc_user_roi where pt between "${sdate}" and "${edate}" GROUP by pt,CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 0 AND 9 THEN '跳一跳' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 10 AND 19 THEN '箭頭' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 20 AND 99 THEN '對照組' -- 實驗分桶修改 end END;
實驗LTV模版
--odps sql --********************************************************************-- --author:odps-read --create time:2019-11-25 14:08:06 --********************************************************************-- with userdaystat as ( select pt,user_id from workspace_saiyisai.odps_calc_user_roi where pt between '${date_start}' AND '${date_end}' and box_day_age = 0 and client_version >= "5.4.4.5" and day_age = 0 ), odps_calc_user_roi as ( --roi user表 select * from workspace_saiyisai.odps_calc_user_roi where pt between '${date_start}' AND SUBSTR(DATEADD(TO_DATE('${date_end}','yyyy-mm-dd'),7,'dd'),1,10) ) SELECT userdaystat.pt AS 日期 ,CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 0 AND 84 THEN '對照' WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 85 AND 89 THEN '改版' WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 90 AND 94 THEN '提現' WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 95 AND 99 THEN '改版+提現' -- 實驗分桶修改 end END AS 策略 ,sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) as 新增總人數 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,times,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) /60 ,3 )as 新增人均時長 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,max_flash_coin+red_coin,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 新增人均補貼 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,possible_reward,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 新增人均可提補貼 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,income,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 新增人均收入 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,video_count,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 新增人均視頻數 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,times,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) /60 ,3 )as 3日人均時長 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,max_flash_coin+red_coin,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 3日人均補貼 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,video_count,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 3日人均視頻數 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2 ,possible_reward,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 3日人均可提補貼 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 2,income,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 3日人均收入 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 6 ,times,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) /60 ,3 )as 7日人均時長 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 6 ,max_flash_coin+red_coin,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 7日人均補貼 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 6 ,video_count,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 7日人均視頻數 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 6 ,possible_reward,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 7日人均可提補貼 ,round( sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd') BETWEEN 0 and 6,income,0 )) / sum(if(DATEDIFF(to_date(odps_calc_user_roi.pt,'yyyy-mm-dd'),to_date(userdaystat.pt,'yyyy-mm-dd'),'dd')=0,1,0 )) ,3 ) as 7日人均收入 FROM userdaystat ,odps_calc_user_roi WHERE userdaystat.user_id = odps_calc_user_roi.user_id GROUP BY userdaystat.pt, CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 0 AND 84 THEN '對照' WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 85 AND 89 THEN '改版' WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 90 AND 94 THEN '提現' WHEN basic_data_center.getbucketid(userdaystat.user_id,'${bucket_num}') BETWEEN 95 AND 99 THEN '改版+提現' -- 實驗分桶修改 end END;
新增留存模版
--odps sql --********************************************************************-- --author:odps-game --create time:2019-11-21 16:22:46 --********************************************************************-- with user_t as( select pt,user_id from workspace_saiyisai.odps_calc_user_roi where pt between '${date_start}' AND '${date_end}' and day_age = 0 ), userdaystat as( select pt,user_id from workspace_saiyisai.odps_calc_user_roi where pt between '${date_start}' AND SUBSTR(DATEADD(TO_DATE('${date_end}','yyyy-mm-dd'),14,'dd'),1,10) ) select CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_t.user_id,'') BETWEEN 0 AND 99 THEN "20-99" -- 實驗分桶修改 end END AS 策略, user_t.pt as 日期, count(distinct user_t.user_id) 新增, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 1, 1, 0) ) 留存1, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 3, 1, 0) ) 留存3, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 7, 1, 0) ) 留存7, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 10, 1, 0) ) 留存10, sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 14, 1, 0) ) 留存14, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 1, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存1率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 3, 1, 0) ) / count(distinct user_t.user_id ),3 ) as 留存3率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 7, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存7率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 10, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存10率, ROUND( sum( if (DATEDIFF(CONCAT(userdaystat.pt, ' 00:00:00'), CONCAT(user_t.pt, ' 00:00:00'), 'dd') = 14, 1, 0) ) / count(distinct user_t.user_id) ,3 ) as 留存14率 from user_t LEFT join userdaystat on user_t.user_id = userdaystat.user_id and userdaystat.pt in ( SUBSTR(DATEADD(TO_DATE(user_t.pt,'yyyy-mm-dd'),1,'dd'),1,10), SUBSTR(DATEADD(TO_DATE(user_t.pt,'yyyy-mm-dd'),3,'dd'),1,10), SUBSTR(DATEADD(TO_DATE(user_t.pt,'yyyy-mm-dd'),7,'dd'),1,10), SUBSTR(DATEADD(TO_DATE(user_t.pt,'yyyy-mm-dd'),10,'dd'),1,10), SUBSTR(DATEADD(TO_DATE(user_t.pt,'yyyy-mm-dd'),14,'dd'),1,10) ) group by user_t.pt, CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_t.user_id,'') BETWEEN 0 AND 99 THEN "20-99" -- 實驗分桶修改 end END;
新增ROI模版
-- --odps sql -- --********************************************************************-- -- --author:odps-game -- --create time:2019-11-21 14:47:44 -- --********************************************************************-- select pt, CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 0 AND 9 THEN '跳一跳' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 10 AND 19 THEN '箭頭' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 20 AND 99 THEN '對照組' -- 實驗分桶修改 end END AS 策略, count(1) as 日活,round(sum(video_count) / count(1),2) as 人均視頻數, round(sum(times) / count(1),3) as 人均時長,round(sum(max_flash_coin + red_coin) / count(1),3) as 人均補貼, round(sum(income) / count(1),3) as 人均收入,ROUND(sum(possible_reward) / count(1),3) as 人均可提補貼 from workspace_saiyisai.odps_calc_user_roi where pt between "${sdate}" and "${edate}" and day_age = 0 GROUP by pt,CASE -- 實驗分桶修改 start WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 0 AND 9 THEN '跳一跳' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 10 AND 19 THEN '箭頭' WHEN basic_data_center.getbucketid(user_id,'${bucket_num}') BETWEEN 20 AND 99 THEN '對照組' -- 實驗分桶修改 end END;