코딩테스트
[leetcode] 550. Game Play Analysis IV 문제 풀이와 윈도우 함수를 사용할 수 있는 위치
_maddy
2024. 6. 19. 16:53
https://leetcode.com/problems/game-play-analysis-iv/description/
2일 연속으로 플레이한 유저수의 비율을 구하는 문제.

# Write your MySQL query statement below
-- 처음 로그인 한 다음날 다시 로그인한 플레이어의 비율을 소수점 2자리로
-- 첫번째 로그인 날짜부터 최소. 2일 연속으로 로그인한 플레이어 수를 계산한다음 전체 플레이 수로 나누어야 함
WITH NEXT AS(
SELECT
PLAYER_ID,
DATEDIFF(EVENT_DATE,MIN(EVENT_DATE) OVER(PARTITION BY PLAYER_ID))=1 AS CONNECT
FROM ACTIVITY
)
SELECT
ROUND(SUM(CONNECT)/COUNT(DISTINCT PLAYER_ID),2) AS FRACTION
FROM NEXT
최초로 로그인한 event_date와의 차이가 1인 것을 찾아주면 된다. 그리고 주의할 것은 전체 유저수를 셀때 중복된 유저수는 제외하고 세야한다는 것을 잊지 말자!!
window 함수
위 문제에서 min() over(partitioin by~) 윈도우 함수를 통해 최초 로그인 날짜를 구해주었다. 윈도우 함수를 사용할 때. 사용가능한 위치가 있고 사용하지 못하는 위치가 있다.
윈도우 함수는 SELECT, GROUP BY, ORDER BY, HAVING, WITH 절에서 사용할 수 있지만, WHERE 절과 FROM 절에서는 사용할 수 없다.
- SELECT 절: 윈도우 함수는 SELECT 절에서 사용할 수 있다. 이를 통해 윈도우 함수의 결과를 출력할 수 있다.
- WHERE 절: 윈도우 함수는 WHERE 절에서 사용할 수 없다. WHERE 절은 행 단위로 필터링하기 때문에 윈도우 함수를 사용할 수 없다.
- GROUP BY 절: 윈도우 함수는 GROUP BY 절에서 사용할 수 있다. 이를 통해 그룹 내에서 윈도우 함수를 적용할 수 있다.
- ORDER BY 절: 윈도우 함수는 ORDER BY 절에서 사용할 수 있다. 이를 통해 윈도우 함수의 결과를 정렬할 수 있다.
- HAVING 절: 윈도우 함수는 HAVING 절에서 사용할 수 있다. 이를 통해 윈도우 함수의 결과를 필터링할 수 있다.
- WITH 절(Common Table Expression, CTE): 윈도우 함수는 WITH 절에서 사용할 수 있다. 이를 통해 중간 결과를 만들고 이를 활용할 수 있다.
FROM 절에서는 윈도우 함수를 사용할 수 없다. FROM 절은 데이터 소스를 지정하는 부분이기 때문에 윈도우 함수를 사용할 수 없다.