[LeetCode] 534. Game Play Analysis III
2022. 11. 27. 22:16ㆍTIL💡/Database
난이도 상승하는 게 느껴진다.
이는 player_id별로 누적합을 구하려 하니, subquery로 2중 루프 같이 각 누적합을 구하려 하니 TLE(Time Limit Exceeded)하게 되었다.
SELECT A1.player_id, A1.event_date,
(
SELECT
SUM(A2.games_played)
FROM
Activity A2
WHERE
A2.player_id = A1.player_id
AND A2.event_date <= A1.event_date
) AS games_played_so_far
FROM
Activity A1;
Approach 1: SUM() window function
SUM 함수에도 OVER, PARTITION BY가 존재하는지 몰랐다;; RANK에만 있는 줄 알았는데
SUM(대상) OVER(PARTITION BY 분류 기준 ORDER BY 정렬 기준)
SELECT
player_id,
event_date,
SUM(games_played) OVER(
PARTITION BY player_id
ORDER BY event_date
) AS games_played_so_far
FROM Activity
이렇게 만들면 player_id별로 누적합을 구할 수 있다.
Approach 2: Non-equi self join
1. Activity 테이블을 player_id가 동일하고 event_date가 다른 event_date에 비해 같거나 작은 경우에 셀프 조인한다.
2. aggregate function을 적용하기 위해 player_id와 event_date를 기준으로 그룹으로 묶는다.
3. SUM() aggregate function을 games_played 필드에 적용한다.
SELECT
A2.player_id,
A2.event_date,
SUM(A1.games_played) AS games_played_so_far
FROM
Activity A1
INNER JOIN Activity A2 ON A1.player_id = A2.player_id
AND A1.event_date <= A2.event_date
GROUP BY
A2.player_id,
A2.event_date;
'TIL💡 > Database' 카테고리의 다른 글
[LeetCode] 262. Trips and Users (0) | 2022.12.08 |
---|---|
[LeetCode] 550. Game Play Analysis IV (0) | 2022.12.07 |
[LeetCode] 511. Game Play Analysis I (0) | 2022.11.27 |
[LeetCode] 181. Employees Earning More Than Their Managers (0) | 2022.11.27 |
[LeetCode] 177. Nth Highest Salary (0) | 2022.11.27 |