码迷,mamicode.com
首页 > 数据库 > 详细

SQL 常用方法例子

时间:2020-01-11 11:38:43      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:sda   模版   orm   extract   --   for   coalesce   mes   left join   

 

SQL left join  例子

 

    with a as(
        SELECT * from workspace_saiyisai.odps_base_sdkh_mid_roi
        WHERE   pt = ${s1}
    ),
    b as(
        select _id,device_id,pt
        FROM sync_mongo_box.extract_sdkh_app_source__userinfo
        WHERE SUBSTR(create_time,1,10) = pt and pt = ${s1}
        and _id in ("702615261", "711807701", "713043891" )       

    )
    SELECT  COUNT(a.device_id) AS devices
    ,round(SUM(duration)/60/COUNT(a.device_id),3) AS avg_duration
    ,round(SUM(front_end_duration)/60/COUNT(a.device_id),3) as avg_app_duration
    ,round(SUM(videos)/COUNT(a.device_id),3) as avg_videos
    ,round(SUM(coins)/COUNT(a.device_id),3) AS avg_coins
    ,ROUND(SUM(tixian_money),3) AS tixian_money
    ,round(SUM(tixian_money)/COUNT(a.device_id),3) AS avg_tixian_money
    ,ROUND(COALESCE(SUM(videos*video_price),0),3) AS ad_income
    ,round(COALESCE(SUM(videos*video_price)/COUNT(a.device_id),0),3) AS avg_ad_income
    ,ROUND(COALESCE((SUM(videos*video_price)-SUM(tixian_money)-SUM(active_cost)),0),3) AS roi
    ,round(COALESCE((SUM(videos*video_price)-SUM(tixian_money)-SUM(active_cost))/COUNT(a.device_id),0),3) AS avg_roi
    ,ROUND(COALESCE(SUM(active_cost),0),3) AS active_cost
    ,round(COALESCE(SUM(active_cost)/COUNT(a.device_id),0),3) AS avg_active_cost
    from  b LEFT  join a  on a.device_id = b.device_id and a.pt = b.pt; 

 

 

全量ROI 模版

 

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;

 

留存模版

              with user as (
                        SELECT a.device_id
                        ,case 
                            WHEN age=1 THEN 1 else 0 end as live1
                        , case
                            WHEN age=2 THEN 1 else 0 end as live2
                        , case
                            WHEN age=3 THEN 1 else 0 end as live3
                        , case
                            WHEN age=7 THEN 1 else 0 end as live7
                        , case
                            WHEN age=14 THEN 1 else 0 end as live14
                        , case
                            WHEN age=30 THEN 1 else 0 end as live30
                        , a.pt    
                            FROM
                        (
                            SELECT device_id, pt FROM 
                        sync_mongo_box.extract_sdkh_app_source__userdaystat WHERE pt = {partition} {day_age}
                        ) as a 
                        LEFT JOIN 
                    (SELECT device_id, coalesce(DATEDIFF(CONCAT(pt, " 00:00:00"), CONCAT({partition}, 00:00:00), dd), -1) as age FROM 
                    sync_mongo_box.extract_sdkh_app_source__userdaystat    WHERE pt in (
                        SUBSTR(DATEADD(TO_DATE({partition},yyyy-mm-dd),1,dd),1,10),
                        SUBSTR(DATEADD(TO_DATE({partition},yyyy-mm-dd),2,dd),1,10),
                        SUBSTR(DATEADD(TO_DATE({partition},yyyy-mm-dd),3,dd),1,10),
                        SUBSTR(DATEADD(TO_DATE({partition},yyyy-mm-dd),7,dd),1,10),
                        SUBSTR(DATEADD(TO_DATE({partition},yyyy-mm-dd),14,dd),1,10),
                        SUBSTR(DATEADD(TO_DATE({partition},yyyy-mm-dd),30,dd),1,10)
                        )
                         and day_age != 0) as b
                    on a.device_id = b.device_id
                ),

                cost as (
                    SELECT cost, pt from workspace_box.base_game_data_form WHERE pt={partition} and app=sdkh
                )

                SELECT
                      COUNT(DISTINCT device_id) as active
                      , round(max(cost)/count(DISTINCT device_id), 2) as one_cost
                      , sum(live1) as live1
                      , sum(live2) as live2
                      , sum(live3) as live3
                      , sum(live7) as live7
                      , sum(live14) as live14
                      , sum(live30) as live30
                FROM user LEFT join cost 
                on user.pt = cost.pt

 

留存模版

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

    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率

    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;

SQL 常用方法例子

标签:sda   模版   orm   extract   --   for   coalesce   mes   left join   

原文地址:https://www.cnblogs.com/zhaoyingjie/p/12179271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!