1097. Game Play Analysis V (問題レベル: Hard)要課金
今日の問題はこれ。
日付ごとに、その日がはじめてプレイしたユーザーが次の日もプレイする割合を算出するという問題。
Middle
, Hard
の問題では珍しい一つのテーブルからの問題。
With
句とCASE WHEN
を使って自力で解決できた。
最終的に提出したコードは下記のとおり。
SQL
WITH cte AS
(SELECT DISTINCT player_id,
MIN(event_date) OVER(PARTITION BY player_id) AS date
FROM activity)
SELECT m.date AS install_dt,
COUNT(m.player_id) AS installs,
ROUND(AVG(CASE WHEN m.games_played IS NULL THEN 0.0 ELSE 1.0 END),2) AS Day1_retention
FROM
(SELECT c.player_id, c.date, a.games_played
FROM cte c
LEFT JOIN activity a
ON a.player_id=c.player_id AND DATEDIFF(day, c.date, a.event_date) = 1) m
GROUP BY m.date
Left JOIN
で初日の次の日のデータがある場合と無い場合で切り分けるという考え方を使った。
今日のポイントはWITH
とCASE WHEN
とLeft JOIN
で解決としよう。
-
LeetCodeの問題は、
MS SQL Server
で解いています。