国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive SQL必刷練習(xí)題:留存率問題(*****)

這篇具有很好參考價值的文章主要介紹了Hive SQL必刷練習(xí)題:留存率問題(*****)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

留存率:

首次登錄算作當(dāng)天新增,第二天也登錄了算作一日留存。可以理解為,在10月1號登陸了。在10月2號也登陸了,那這個人就可以算是在1號留存

今日留存率 = (今日登錄且明天也登錄的用戶數(shù)) / 今日登錄的總用戶數(shù) * 100%

留存率計算hivesql,Hive SQL,hive,sql,hadoop

解決思路:

? 這類問題主要借助left join,根據(jù)原表的數(shù)據(jù),先去找到每個用戶最先登錄的時間,這個就是通過對用戶group by,然后搜索date_format(min(login_ts),‘yyyy-MM-dd’)。這樣就得到一個表,第一列是用戶id,第二列就是每一個用戶第一次登錄的日期。

? 之后用這個新表,left join原表數(shù)據(jù),但是這個條件不僅是id相等,還要有個t1.user_id=t2.user_id and datediff(date_format(t2.login_ts,‘yyyy-MM-dd’),t1.first_login)=1

說實話,這個多條件join的還確實沒遇到過。這樣符合條件的就會被增加到后面,不符合的賦空值。【當(dāng)然也可以不多條件join,直接就是兩個表的user_id一樣,那這樣再計算新增人數(shù)和留存人數(shù)的時候,就不能直接通過count(列名字)來計算了,還需要去重和判斷天數(shù)關(guān)系】比如下圖這樣

留存率計算hivesql,Hive SQL,hive,sql,hadoop

? 這樣就可以根據(jù)first_login分組group by計算count(t1.id),就是每日新增人數(shù),然后count(連接上的表的列信息),就是后續(xù)一天也登陸的人數(shù)。

代碼:

select
  t3.first_login,
  t3.register,
  t3.remain_1/t3.register retention
from
  (
   select
     t1.first_login,
     count(t1.user_id) register,
     count(t2.user_id) remain_1
   from
     (
      select
        user_id,
        date_format(min(login_ts),'yyyy-MM-dd')   first_login
      from
        user_login_detail
      group by
        user_id
      )t1
   left join
     user_login_detail t2
   on
     t1.user_id=t2.user_id and datediff(date_format(t2.login_ts,'yyyy-MM-dd'),t1.first_login)=1
   group by
     t1.first_login
)t3

總結(jié)一下:

其實這類問題的關(guān)鍵在于,你要想辦法將每個用戶的最初登錄時間和第二天登錄時間這兩個信息,放到一行中。這就是先求出來初次登陸時間后,然后借助這個表進(jìn)行l(wèi)eft join,之后再此基礎(chǔ)上以最初登錄時間進(jìn)行分組group by,再用聚合函數(shù)即可。

但是還有一種思路,就是直接進(jìn)行開窗排序,然后用row_number排序,找到前兩名的日期,這個用where篩選,并且在查詢條件里面用max,和min聚合函數(shù)可以找到首日和第二日,第一個日期就是首日,第二個就是第二次登錄日期,只要看這個第二次登錄日期是不是首日的第二天就行文章來源地址http://www.zghlxwxcb.cn/news/detail-856881.html

上代碼:

SELECT
	concat(round(sum(if(datediff(f2, f1) = 1, 1, 0)) / count(*) * 100, 1), '%') percentage  
	-- 注意round保留一位小數(shù)的用法
from(
select
	user_id,
    min(create_date) f1,
    max(create_date) f2
   
from(
SELECT
	user_id,
    create_date,
  	row_number() over(partition by user_id order by create_date) num
from(
  select
      user_id,
      create_date
  FROM order_info
  group by user_id,create_date
)t1
 )t2
 where num<=2
 group by user_id
)t3

到了這里,關(guān)于Hive SQL必刷練習(xí)題:留存率問題(*****)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • sql練習(xí)題

    DQL練習(xí)1-學(xué)生表 ?? ?創(chuàng)建如下學(xué)生表? ?? ?create table student( ?? ?id int, ?? ?name varchar(20), ?? ?gender varchar(20), ?? ?chinese int, ?? ?math int, ?? ?english int ?? ?);?? ??? ? ?? ?? ?? ?insert into student values? ?? ?(1,\\\'張明\\\',\\\'男\(zhòng)\\',89,78,90), ?? ?(2,\\\'李進(jìn)\\\',\\\'男\(zhòng)\\',67,53,95), ?? ?(3,\\\'王五

    2024年02月16日
    瀏覽(24)
  • sql函數(shù)練習(xí)題

    sql函數(shù)練習(xí)題

    1. 計算用戶8月每天的練題數(shù)量 題目:現(xiàn)在運(yùn)營想要計算出 2021年8月每天用戶練習(xí)題目的數(shù)量 ,請取出相應(yīng)數(shù)據(jù)。 示例:question_practice_detail id device_id question_id result date 1 2138 111 wrong 2021-05-03 2 3214 112 wrong 2021-05-09 3 3214 113 wrong 2021-06-15 4 6543 111 right 2021-08-13 5 2315 115 right 2021-08-1

    2024年02月07日
    瀏覽(20)
  • 50道SQL練習(xí)題

    50道SQL練習(xí)題

    https://www.bilibili.com/video/BV14h411R7F6/?p=4vd_source=76a21f3936db28f5e63b70544272d65e https://www.cnblogs.com/Diyo/p/11424844.html https://zhuanlan.zhihu.com/p/113173133 方法1:自連接 思路:先使用自連接score表找到01\\\"課程比\\\"02\\\"課程成績高的的學(xué)生id,然后關(guān)聯(lián)學(xué)生表獲取學(xué)生信息 方法二: 長形數(shù)據(jù)變成寬型數(shù)

    2024年02月09日
    瀏覽(73)
  • sql-50練習(xí)題6-10

    sql-50練習(xí)題6-10

    sql真的非常靈活,一個題目可能有很多很多種解法,我記錄的只是我自己的一個解題思路,如果大家有更好的不同解法歡迎在評論區(qū)一起探討 ps:有些題可能解法會重復(fù),比如求大于,我們下一個題可能是求小于,大家如果第一遍沒有做出來,看了我寫的之后有了思路,可以

    2024年02月08日
    瀏覽(19)
  • sql-50練習(xí)題16-20

    sql-50練習(xí)題16-20

    sql真的非常靈活,一個題目可能有很多很多種解法,我記錄的只是我自己的一個解題思路,如果大家有更好的不同解法歡迎在評論區(qū)一起探討 ps:有些題可能解法會重復(fù),比如求大于,我們下一個題可能是求小于,大家如果第一遍沒有做出來,看了我寫的之后有了思路,可以

    2024年02月06日
    瀏覽(21)
  • sql-50練習(xí)題11-15

    sql-50練習(xí)題11-15

    sql真的非常靈活,一個題目可能有很多很多種解法,我記錄的只是我自己的一個解題思路,如果大家有更好的不同解法歡迎在評論區(qū)一起探討 ps:有些題可能解法會重復(fù),比如求大于,我們下一個題可能是求小于,大家如果第一遍沒有做出來,看了我寫的之后有了思路,可以

    2024年02月06日
    瀏覽(20)
  • 【MySQL】- 05 sql 語句練習(xí)題

    【MySQL】- 05 sql 語句練習(xí)題

    查詢結(jié)果就不放了,語句是否成功運(yùn)行,結(jié)果是否正確都容易自行判斷 –1. 學(xué)生表 Student(s_id,s_name,s_birth,s_sex) --學(xué)生編號,學(xué)生姓名, 出生年月,學(xué)生性別 –2. 課程表 Course(c_id,c_name,t_id) – --課程編號, 課程名稱, 教師編號 –3. 教師表 Teacher(t_id,t_name) --教師編號,教師姓名 –4. 成

    2024年02月08日
    瀏覽(21)
  • 【SQL每日一練】分組過濾練習(xí)題

    【SQL每日一練】分組過濾練習(xí)題

    題目:現(xiàn)在運(yùn)營想查看每個學(xué)校用戶的平均發(fā)貼和回帖情況,尋找低活躍度學(xué)校進(jìn)行重點(diǎn)運(yùn)營,請取出平均發(fā)貼數(shù)低于5的學(xué)校或平均回帖數(shù)小于20的學(xué)校。 代碼如下: WHERE 無法與合計函數(shù)一起使用; SQL語句執(zhí)行順序 (8) SELECT (9) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GR

    2024年04月23日
    瀏覽(41)
  • 【MySQL】- 05 sql 語句練習(xí)題(第二部分)

    20、 查詢學(xué)生的總成績并進(jìn)行排名 21、 查詢不同老師所教不同課程平均分從高到低顯示 22、 查詢所有課程的成績第2名到第3名的學(xué)生信息及該課程成績 23、 統(tǒng)計各科成績各分?jǐn)?shù)段人數(shù):課程編號,課程名稱,[100-85],[85-70],[70-60],[0-60]及所占百分比 24、 查詢學(xué)生平均成績及其名次

    2024年02月09日
    瀏覽(22)
  • 10 SQL進(jìn)階 -- 綜合練習(xí)題 -- 10道經(jīng)典SQL題目,配套數(shù)據(jù)與解答

    10 SQL進(jìn)階 -- 綜合練習(xí)題 -- 10道經(jīng)典SQL題目,配套數(shù)據(jù)與解答

    點(diǎn)擊下方鏈接直接下載 創(chuàng)建數(shù)據(jù)表腳本:http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/create_table.sql 執(zhí)行建表語句 執(zhí)行成功 查看創(chuàng)建的表 點(diǎn)擊下方鏈接直接下載 插入數(shù)據(jù)腳本:https://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/SQL/data.zip 大家下載好腳本后,先在MySQL環(huán)境中運(yùn)

    2024年04月27日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包