๋ฌธ์
https://leetcode.com/problems/game-play-analysis-iv/
์ฝ๋
๋ด ๋ต์
# Write your MySQL query statement below
with lag_date as (
select
*,
min(event_date) over (partition by player_id) as first_date
from activity
)
select
round(count(distinct player_id) / (select count(distinct player_id) from activity), 2) as fraction
from lag_date
where datediff(event_date, first_date) = 1
-- 10๋ถ
ํ ๋ธ๋ก๊ทธ ๋ต์
SELECT ROUND(SUM(login)/COUNT(DISTINCT player_id), 2) AS fraction
FROM (
SELECT
player_id,
DATEDIFF(event_date, MIN(event_date) OVER(PARTITION BY player_id)) = 1 AS login
FROM Activity
) as t
๋ฌธ์ ํ์ด
๋๋ lag_date CTE์์ ์ฒซ ๋ก๊ทธ์ธ ๋ ์ง๋ฅผ ๊ตฌํ ๋ค
ํ ๋ ์ง์ ์ฒซ ๋ก๊ทธ์ธ ๋ ์ง์ datediff๊ฐ 1์ด๋ฉด countํจ์ผ๋ก์จ ๋ถ์๋ฅผ ๊ตฌํ๊ณ
๋ถ๋ชจ๋ ์๋ก์ด select๋ฌธ์ผ๋ก ๊ตฌํ๋ค
ํ ํ์ด์์๋
์ฒ์๋ถํฐ ํ ๋ ์ง์ ์ต์ ๋ ์ง์ datediff๋ฅผ ๊ตฌํ๊ณ
๊ฒฐ๊ณผ๊ฐ 1์ ๋ง์กฑํ ์, 1์. ๋ง์กฑํ์ง ๋ชปํ๋ฉด 0์ login์ด๋ผ๋ ์๋ก์ด ์ปฌ๋ผ์ ๋ด์๋ค.
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด player_id๋ฅผ ๋ณด์กดํ๊ณ ์ฒซ ๋ก๊ทธ์ธ ์ ์ ๋ฅผ ํ๋ณํ ์ ์๋ค.


- ๋ฑํธ ๋ฐ ๋ถ๋ฑํธ ์ฐ์ฐ์๋ฅผ ์กฐ๊ฑด๋ฌธ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ
์ฌ๊ธฐ์ ๋ฝ์ธํธ๋ datediff์ ๋ฑํธ๋ฅผ ๊ฒฐํฉํด์ ์กฐ๊ฑด๋ฌธ์ฒ๋ผ ์ฌ์ฉํ๋ค๋ ๊ฒ!

์คํ
datediff(~) = 1์ ์ถฉ์กฑํ๋ฉด true๊ฐ์ธ 1์ด ์ถ๋ ฅ๋๊ณ , ์๋๋ฉด false๊ฐ์ธ 0์ด ์ถ๋ ฅ๋๋ค
ํ์ฉ ์์
select
games_played,
games_played >= 5 as tf
from activity

games_played๊ฐ 5๋ณด๋ค ํด ์์ 1 ์๋๋ฉด 0์ ์ถ๋ ฅํ๋ค. (์ ๊ธฐ๋ฐฉ๊ธฐ~~)
๋๋ ์
๋ฌธ๋ฒ์ด ๋ณ ๊ฑฐ ์๋ ๋ณด์ฌ๋ ์ ํ์ฉํ๋ฉด
๊น๋ค๋ก์ด ์กฐ๊ฑด๋ ํด๊ฒฐํ ์ ์๋ค.