Tools/- SQL

[SQL] leetcode | 550. Game Play Analysis IV ์˜ˆ์ œ ํ’€์ด

์Šค์œ„๋ฏผ 2025. 1. 23. 15:00

๋ฌธ์ œ

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์„ ์ถœ๋ ฅํ•œ๋‹ค. (์‹ ๊ธฐ๋ฐฉ๊ธฐ~~)

 

 

๋А๋‚Œ ์ 

๋ฌธ๋ฒ•์ด ๋ณ„ ๊ฑฐ ์•„๋…€๋ณด์—ฌ๋„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด

๊นŒ๋‹ค๋กœ์šด ์กฐ๊ฑด๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.