题解 | #计算用户的平均次日留存率#

计算用户的平均次日留存率

https://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

select
    avg(if(datediff(date2,date1)=1, 1, 0)) as avg_ret
from
    (
        select
            distinct device_id,
            date as date1,
            lead (date, 1, null) over (
                partition by
                    device_id
                order by
                    date
            ) as date2
        from(
        select distinct device_id, date
        from question_practice_detail
    )as unique_id_qpd
)as id_date_qpd



一、 if(判断,真,假) 函数

二、开窗函数:函数 + over(partition by <分组用列> order by <排序用列>)

*开窗函数不会互相干扰,因此在同一个查询语句中可以同时使用多个开窗函数

分为三类:

1、排序开窗函数

① row_number() -- 相同值排名顺延,返回结果1、2、3、4

② rank() -- 相同结果排名相同,后续排名不连续,返回结果为 1、2、2、4

③ dense_rank() -- 相同结果排名相同,后续排名顺延,返回结果为 1、2、2、3

④ ntile(n) -- 分组排名,将数据分为n组并返回对应组号1、2......n。

select
    grades,
    subjects,
    results,
    row_number() over (
        partition by
            grades,
            subjects
        order by
            results desc
    ) as row_numbers,
    rank() over (
        partition by
            grades,
            subjects
        order by
            results desc
    ) as ranks,
    dense_rank() over (
        partition by
            grades,
            subjects
        order by
            results desc
    ) as dense_ranks,
    ntile (3) over (
        partition by
            grades,
            subjects
        order by
            results desc
    ) as ntiles
from
    test11
#    表示将数据集按照grades、subjects字段进行分组后,根据对应排序函数并按照results字段降序返回排名

2、聚合开窗函数

① sum() -- 分组求和

② count() -- 分组求总数

③ min() -- 分组求最小值

④ max() -- 分组求最大值

⑤ avg() --分组求均值

3、其他开窗函数

① lag(字段名,n,0) -- 移位开窗函数,表示返回向上第n行指定字段对应数据。其中n代表向上偏移n行,0代表若偏移行数超出表范围则返回0也可以改成其他值,若不写则默认null

② lead(字段名,n,0) -- 移位开窗函数,与lag()相反,表示返回向下第n行指定字段对应数据

③ first_value() -- 取分组内排序后,截止到当前行,第一个值

④ last_value() -- 取分组内排序后,截止到当前行,最后一个值

三、datediff()

语法 :DATEDIFF(datepart,startdate,enddate)
例子 :SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate  
	结果:1
	SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate
	结果:-1

SQL学习 文章被收录于专栏

个人学习的一些小总结

全部评论

相关推荐

下北泽:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
FieldMatching:看成了猪头顾问,不好意思
点赞 评论 收藏
分享
好消息是活的像个人了,周末可以约会吃饭打游戏了坏消息是钱没了,当初来小红书就是为了钱啊哭笑不得😭
犯困嫌疑人:好事儿啊,取消大小周能有更多自己的时间,周末还能约对象玩,这不美滋滋?
投递小红书等公司6个岗位 > 小红书取消大小周
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务