100日でSQLの達人になる@LeetCode! Day47 <WITHとCASE WHENとLeft JOINで解決>
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
で解いています。
Author And Source
この問題について(100日でSQLの達人になる@LeetCode! Day47 <WITHとCASE WHENとLeft JOINで解決>), 我々は、より多くの情報をここで見つけました https://qiita.com/Nono3/items/d70fb648cfc3e60c6c95著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .