[LeetCode] 550. Game Play Analysis IV
2022. 12. 7. 19:49ㆍTIL💡/Database
이번 문제도 튜플
을 생성해서 풀면 간단한 문제이다.
그런데 GROUP BY를 안 쓰고 그냥 MIN으로 구했더니 리트코드가 터져버리더라...;;
다시 한 번 SQL 쿼리에도 효율성이 큰 문제임을 깨달으면서 이번 문제를 풀어나갔다.
크게 Activity 테이블을 3번 쓴다. 한 번은 데이터를 크게 추출하는 베이스 테이블로, 다른 하나는 플레이어별 최초 접속 일자 추출용, 나머지 하나는 전체 플레이어 수를 추출하는 데 사용된다.
복잡해보여도 하나하나 블록 쌓듯이 쿼리를 조합해나가면 어렵지 않게 풀 수 있다.
그리고 여기서 이전 날을 구할 때 DATE_SUB 함수를 INTERVAL과 함께 쓰는 것을 기억해두자.
SELECT
ROUND(
COUNT(A1.player_id)
/ (SELECT COUNT(DISTINCT A3.player_id) FROM Activity A3)
, 2) As fraction
FROM
Activity A1
WHERE
(A1.player_id, DATE_SUB(A1.event_date, INTERVAL 1 DAY)) IN (
SELECT
A2.player_id,
MIN(A2.event_date)
FROM
Activity A2
GROUP BY
A2.player_id
);
'TIL💡 > Database' 카테고리의 다른 글
[LeetCode] 262. Trips and Users (0) | 2022.12.08 |
---|---|
[LeetCode] 534. Game Play Analysis III (0) | 2022.11.27 |
[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 |