算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
今天和大家聊的问题叫做 游戏玩法分析 IV,我们先来看题面:
https://leetcode-cn.com/problems/game-play-analysis-iv/
解题
本题要求计算一个比值,分母是所有不同选手的数量,分子是那些首次在设备登录后连续第二天又登录的选手数量。
分母很容易求,难点在于分子的计算。要计算分子,首先要找到每个选手的首次登录日期。然后,将该查询作为一个临时表与原表连接,再筛选出那些登录日期与首次登录日期相差一天的记录,最后计算数量即可。
SELECT ROUND
(
(
SELECT
COUNT(
IF(DATEDIFF(a1.event_date, a2.min_date) = 1, 1, null)
)
FROM
Activity a1,
(
SELECT
player_id,
MIN(event_date) AS min_date
FROM
Activity
GROUP BY player_id
) a2
WHERE
a1.player_id = a2.player_id
)
/ COUNT(DISTINCT(player_id))
, 2) fraction
FROM
Activity
好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。
上期推文: