首页 > 数据库 >SQL练习:计算用户的平均次日留存率(DATEDIFF)

SQL练习:计算用户的平均次日留存率(DATEDIFF)

时间:2023-01-30 23:11:41浏览次数:41  
标签:01 DATEDIFF SQL +-------------------------------------+ 留存 2021 2023 id

DATEDIFF简单的实现计算用户的平均次日留存率

  • DATEDIFF函数介绍

用于计算计算两个DATE,DATETIME或TIMESTAMP值之间的天数

# 用法
DATEDIFF(date1,date2)
#例子
mysql> SELECT DATEDIFF('2023-01-30','2023-01-29'); 
+-------------------------------------+
| DATEDIFF('2023-01-30','2023-01-29') |
+-------------------------------------+
|                                   1 |
+-------------------------------------+
1 row in set

mysql> SELECT DATEDIFF('2023-01-29','2023-01-30'); 
+-------------------------------------+
| DATEDIFF('2023-01-29','2023-01-30') |
+-------------------------------------+
|                                  -1 |
+-------------------------------------+
1 row in set
  • 题目

描述
题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。

示例:question_practice_detail
id device_id quest_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-13
6 2315 116 right 2021-08-14
7 2315 117 wrong 2021-08-15
……

根据示例,你的查询应返回以下结果:
avg_ret
0.3000

实现:

SELECT COUNT(DISTINCT q2.device_id,q2.date)/count(DISTINCT q1.device_id,q1.date) as avg_ret
from question_practice_detail as q1 left outer join question_practice_detail as q2
on q1.device_id=q2.device_id and DATEDIFF(q2.date,q1.date)=1;

将两张表进行左外连接,连接规则是

  • 用户id相同并且日期相差为1(确保连接的数据为第二天)

然后统计各字段的人数,因为一个用户可能同一天来刷题多次,所以用DISTINCT进行去重

第二天的人数除以第一天的人数,就可以看作平均次日留存率。

标签:01,DATEDIFF,SQL,+-------------------------------------+,留存,2021,2023,id
From: https://www.cnblogs.com/Mr-Sponge/p/17077497.html

相关文章

  • mysql02
    mysqlday02课堂笔记1、把查询结果去除重复记录【distinct】 注意:原表数据不会被修改,只是查询结果去重。 去重需要使用一个关键字:distinct mysql>selectdistinctjobf......
  • 18.3 SQL Server事务与锁详解之(事务篇)
    SQLServer事务与锁详解之(上篇)-事务目录SQLServer事务与锁详解之(上篇)-事务简介事务的基本知识事务ACID特性事务分类事务并发数据访问事务并发带来的一致性问题丢失更新......
  • 16.1 SQL Server角色简介
    SQLServer角色目录SQLServer角色简介把用户添加到角色示例创建用户自定义角色总结简介角色是一组权限。角色帮助简化权限管理。例如,可以将权限分组到一个角色中,并将用......
  • 16.2 SQL Server创建角色
    SQLServer创建角色目录SQLServer创建角色简介示例1)创建新角色2)创建由固定数据库角色拥有的新角色3)检查角色简介角色是数据库级安全资源,是一组权限。要创建新角色,请使......
  • 16.3 SQL Server修改角色
    SQLServer修改角色目录SQLServer修改角色简介示例1)重命名角色2)向角色中添加成员3)从角色中移除成员简介ALTERROLE可以:重命名角色向角色中添加成员从角色中......
  • 17.1 SQL Server数据库邮件
    SQLServer数据库邮件目录SQLServer数据库邮件简介配置SQLServer数据库邮件使用数据库邮件发送邮件1)发送邮件示例2)发送带有查询结果的电子邮件简介数据库电子邮件可以......
  • SQL练习:UNION实现多张表的纵向合并
    左、内、右连接可以实现多表横向合并,而UNION关键字则可以实现多表纵向合并UNION:实现多表纵向合并(默认含去重功能)<sql查询语句1>UNION<sql查询语句2>UNION...UNION......
  • 16.4 SQL Server删除角色
    SQLServer删除角色目录SQLServer删除角色简介示例1)DROPROLE简单示例2)DROPROLE删除具有成员的角色简介语法:DROPROLE[IFEXISTS]role_name;DROPROLE无法删除拥......
  • 18.1 SQL Server阻塞
    SQLServer阻塞目录SQLServer阻塞简介示例简介当两个会话试图同时更新同一数据时,会发生阻塞。第一个会话锁定数据,第二个会话需要等待第一个会话完成并释放锁定。结果......
  • 18.2 SQL Server死锁
    SQLServer死锁目录SQLServer死锁简介示例简介死锁是一个并发问题,其中两个会话会阻止彼此的进程。第一个会话锁定了另一个会话想要访问的资源,反之亦然。下图说明了SQL......