【SQL】550. 游戏玩法分析 IV (关键点:确定连续两次登录)

前述

常见函数用法示例:

  • DATEDIFF(col1, col2) = 1
  • DATE_ADD(MIN(col), INTERVAL 1 DAY)
  • ROUND(3.1415926,3) ==> 四舍五入得到 3.142

题目描述

leetcode原题:550. 游戏玩法分析 IV

在这里插入图片描述
在这里插入图片描述

思路

  1. 确定连续两次登录
  2. 统计,保留两位小数

写法一

关键点:如何确定连续两次登录?

  • 增加一列(命名为supposed_sec_load):event_date的时间上增加一天,查找是否event_date和supposed_sec_load有相同日期的
select ROUND(COUNT(DISTINCT(B.player_id))/COUNT(DISTINCT(A.player_id)), 2) as fraction
from Activity A 
left join (
    select player_id, DATE_ADD(MIN(event_date), INTERVAL 1 DAY) as supposed_sec_load
    from Activity
    group by player_id
) B
on B.player_id = A.player_id and B.supposed_sec_load = A.event_date

代码过程解析:

在这里插入图片描述
加上and B.supposed_sec_load = A.event_date 进行条件过滤

在这里插入图片描述
最后再统计一下就可以了。

写法二

select IFNULL(ROUND(COUNT(DISTINCT(C.player_id))/COUNT(DISTINCT(Activity.player_id)), 2), 0) as fraction
from (
    select A.player_id
    from Activity A
    join (
        select player_id, DATE_ADD(MIN(event_date), INTERVAL 1 DAY) AS sec_load
        from Activity
        group by player_id
        ) B
    on A.player_id = B.player_id and A.event_date = B.sec_load
) C, Activity

写法三

-- select ROUND(AVG(B.event_date IS NOT NULL), 2) AS fraction
select ROUND(sum(if(B.event_date, 1, 0))/count(*), 2) AS fraction
from (
    select player_id, MIN(event_date) AS first_load
    from Activity
    group by player_id
) A
left join Activity B 
on A.player_id =B.player_id and datediff(B.event_date, A.first_load) = 1

附录:记录自己有时候的白痴错误。

--  聚集函数,分组过滤完之后的,用having;  where 是在分组之前进行过滤的。似不似傻?!
-- select *
-- from Activity
-- group by player_id
-- having datediff(event_date, '2016-03-01') = 1

相关推荐

  1. 550. 游戏分析 IV

    2024-03-13 12:24:01       9 阅读
  2. 511. 游戏分析 I

    2024-03-13 12:24:01       34 阅读
  3. sql连续登录

    2024-03-13 12:24:01       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 12:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 12:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 12:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 12:24:01       20 阅读

热门阅读

  1. 在linux中查询运行日志的方法

    2024-03-13 12:24:01       19 阅读
  2. VUE+VScode+elementUI开发环境

    2024-03-13 12:24:01       17 阅读
  3. YoloV8实战:YoloV8-World应用实战案例

    2024-03-13 12:24:01       20 阅读
  4. c语言读写日志代码实现

    2024-03-13 12:24:01       22 阅读
  5. 力扣-中等

    2024-03-13 12:24:01       19 阅读
  6. OpenCV-交互相关接口

    2024-03-13 12:24:01       22 阅读
  7. 突破编程_C++_设计模式(责任链模式)

    2024-03-13 12:24:01       20 阅读
  8. OMP(Orthogonal Matching Pursuit,正交匹配追踪)算法

    2024-03-13 12:24:01       18 阅读