huginn muninn

[leetcode] 550. Game Play Analysis IV 문제 풀이와 윈도우 함수를 사용할 수 있는 위치 본문

코딩테스트

[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 절에서는 사용할 수 없다.

 

  1. SELECT 절: 윈도우 함수는 SELECT 절에서 사용할 수 있다. 이를 통해 윈도우 함수의 결과를 출력할 수 있다.
  2. WHERE 절: 윈도우 함수는 WHERE 절에서 사용할 수 없다. WHERE 절은 행 단위로 필터링하기 때문에 윈도우 함수를 사용할 수 없다.
  3. GROUP BY 절: 윈도우 함수는 GROUP BY 절에서 사용할 수 있다. 이를 통해 그룹 내에서 윈도우 함수를 적용할 수 있다.
  4. ORDER BY 절: 윈도우 함수는 ORDER BY 절에서 사용할 수 있다. 이를 통해 윈도우 함수의 결과를 정렬할 수 있다.
  5. HAVING 절: 윈도우 함수는 HAVING 절에서 사용할 수 있다. 이를 통해 윈도우 함수의 결과를 필터링할 수 있다.
  6. WITH 절(Common Table Expression, CTE): 윈도우 함수는 WITH 절에서 사용할 수 있다. 이를 통해 중간 결과를 만들고 이를 활용할 수 있다.

FROM 절에서는 윈도우 함수를 사용할 수 없다. FROM 절은 데이터 소스를 지정하는 부분이기 때문에 윈도우 함수를 사용할 수 없다.