LeetCode(数据库)- 游戏玩法分析 IV

Posted Lux_Sun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode(数据库)- 游戏玩法分析 IV相关的知识,希望对你有一定的参考价值。

题目链接:点击打开链接

 

题目大意:略。

 

解题思路:

  • 解决方案(1):先用 WITH AS 语句算出经过排序后以及打一个每组第一次登录的标记(mark);然后下面的查询不用过多解释了吧(分子不需要 DISTINCT 因为可以保证每组只有一个)
  • 解决方案(2):略,太好理解了

 

AC 代码

-- 解决方案(1)
WITH t1 AS(
    WITH t2 AS(SELECT * FROM Activity ORDER BY player_id, event_date)
    SELECT *, IF(@p<>player_id, 1, 0) mark, @p:=player_id
    FROM t2, (SELECT @p:=-1) init
)

SELECT ROUND((SELECT COUNT(tt2.player_id)
FROM t1 tt1, t1 tt2
WHERE tt1.player_id = tt2.player_id AND DATEDIFF(tt1.event_date, tt2.event_date) = 1 AND tt2.mark = 1)
/
(SELECT COUNT(DISTINCT player_id) FROM Activity), 2)
AS fraction

-- 解决方案(2)
SELECT ROUND(avg(a.event_date IS NOT NULL), 2) fraction
FROM 
    (SELECT player_id, min(event_date) AS login
    FROM activity
    GROUP BY player_id) p 
LEFT JOIN activity a 
ON p.player_id = a.player_id AND datediff(a.event_date, p.login) = 1

以上是关于LeetCode(数据库)- 游戏玩法分析 IV的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(数据库)- 游戏玩法分析 V

LeetCode(数据库)- 游戏玩法分析 I

LeetCode(数据库)- 游戏玩法分析 III

LeetCode(数据库)- 游戏玩法分析 II

LeetCode:Database 11.游戏玩法分析 III

LeetCode:Database 09.游戏玩法分析 I