lag, leag 강의에서 game-play-analysis-iv 문제
https://leetcode.com/problems/game-play-analysis-iv/
이 문제를 풀고 있는데,
제가 작성한 코드는
SELECT ROUND(COUNT(player_id) /(SELECT COUNT(DISTINCT player_id) FROM Activity),2) as fraction
FROM
(
SELECT player_id,
LAG(player_id) OVER (ORDER BY player_id) AS prev_id,
LAG(event_date) OVER (ORDER BY player_id) AS prev_date,
event_date,
RANK() OVER (PARTITION BY player_id ORDER bY event_date) AS rnk
FROM Activity
) A
WHERE rnk = 2
AND DATE_ADD(prev_date, INTERVAL 1 day) = event_date AND player_id = prev_id
입니다. 이 코드로 정답을 체크해 보았을 때 wrong answer라 뜨지만, A FROM절 안에서 event_date, rnk의 순서를 LAG 앞으로 바꾸어 주었을 땐 정답 처리가 되었습니다. 왜 그런걸까요??
아래는 순서를 바꿨을 때 정답처리 되었던 코드 입니다.
SELECT ROUND(COUNT(player_id) /(SELECT COUNT(DISTINCT player_id) FROM Activity),2) as fraction
FROM
(
SELECT player_id,
event_date,
RANK() OVER (PARTITION BY player_id ORDER bY event_date) AS rnk,
LAG(player_id) OVER (ORDER BY player_id) AS prev_id,
LAG(event_date) OVER (ORDER BY player_id) AS prev_date
FROM Activity
) A
WHERE rnk = 2
AND DATE_ADD(prev_date, INTERVAL 1 day) = event_date AND player_id = prev_id
답변 2
1
Soiejung 님,
컬럼의 순서에 따라 정답/오답이 결정나는 것은 아니였고, right answer라고 나온 두번째 코드는 test case를 모두 통과해서 옳은 정답으로 우연히 나온 것입니다. wrong answer라고 나온 첫번째 코드 기준으로 설명 드리겠습니다.
일단 Soiejung님께서 첨부해주신 코드 중
LAG(event_date) OVER (ORDER BY player_id) AS prev_date
가 아닌,
LAG(event_date) OVER (ORDER BY player_id, event_date) AS prev_date
로 작성해야 됩니다. (강의 코드 기준)
그래야지 아래 그림처럼, 해당 player_id의 직전 event_date가 순서대로 나옵니다.

다만, 제가 강의에서 간과했던 부분이 prev_id도
LAG(player_id) OVER (ORDER BY player_id, event_date) AS prev_id
로 ORDER BY event_date를 추가해야 됩니다.
prev_id에 ORDER BY event_date를 추가하지 않는다면, 아래 그림처럼 prev_date와 동일하게 null로 찍혀야 되는 row가 서로 달라지게 됩니다.

따라서 prev_date처럼, prev_id에도 동일하게 ORDER BY event_date를 추가해줘야 합니다.
그럼 아래처럼 동일한 row에 대해서 null로 찍히게 될 것입니다.

따라서 Soiejung 님께서 2번째 코드로 right answer라고 나온 부분은 우연히 모든 test case를 통과해서 맞은 것처럼 나왔지만 실제로 틀린 코드입니다. 1번째 코드의 prev_id와 prev_date를 올바르게 수정해서 다시 돌린다면, right answer로 나오게 될 것입니다.
추후 prev_id 코드에 대해서 강의 수정 진행하도록 하겠습니다.
읽어보시고, 이해가 안가신다면 편하게 다시 질문 부탁드립니다! :)
0
Soiejung 님, 안녕하세요.
Soiejung님 버전 코드까지 같이 첨부해주셔서 제가 답변하기가 훨씬 수월해졌는데요 :)
위에 질문에 대한 답변은 이번주 일요일까지 드리겠습니다! 답변 바로 드리지 못한 점 양해부탁드립니다.
채점 프로그램 미작동
0
11
2
삼성 코테 없어짐
0
28
1
sakila 실전 17번 문제
0
9
1
링크드 리스트 중간 삽입삭제 시간복잡도 질문
0
13
1
복합인덱스 설계 질문
0
27
0
app logs 데이터로 쿼리 연습
0
17
2
재귀함수 종료조건
0
13
1
ArticleReadService 관련 질문
0
19
1
마스터패스...
0
24
1
kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.
1
52
1
[과제] 연습문제 쿼리 작성했습니다!
0
19
2
domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다
1
37
1
백준 서비스 종료로 인한 강의 자료 업데이트 요청드립니다.
0
28
1
실습소 페이지
0
31
3
백준 사이트 준비중이라 문제를 볼 수 가 없어요
0
33
1
코딩살구클럽 가입부탁드립니다
0
30
2
57번
0
30
1
안녕하세요. 요약집 어디서 볼 수 있을까요?
0
28
1
코딩살구클럽 가입 요청 확인부탁드립니다
0
31
2
Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면
1
61
1
스크립트에 대해 질문 있습니다.
1
55
1
리뷰를 가장 많이 작성한 회원들 조회
0
64
2
LAG, LEAD 강의 550. Game Play Analysis IV 관련 질문
1
202
2
Date 강의 / leetcode 1321 질문
1
225
1





