LeetCode刷题实战550:游戏玩法分析 IV

今天和大家聊的问题叫做 游戏玩法分析 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

上期推文:

今天和大家聊的问题叫做 游戏玩法分析 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 上期推文:
经验分享 程序员 微信小程序 职场和发展