인프런 커뮤니티 질문&답변

김주아님의 프로필 이미지
김주아

작성한 질문수

SQL 코딩테스트를 위한 마지막 걸음

LAG, LEAD 강의 550. Game Play Analysis IV 관련 질문

해결된 질문

작성

·

33

1

https://leetcode.com/problems/game-play-analysis-iv/ 

 

안녕하세요. 강의를 수강하고 있는 학생입니다.

해당 문제를 1번 쿼리처럼 풀면 각각 1/3이 나타나는 것을 확인했습니다.

하지만 2번 쿼리처럼 비율을 구하기위해 각각을 나누기하면 완전히 다른 값이 나타나는데 왜 그런것인지 질문드립니다.

-- 1번 쿼리
SELECT COUNT(DISTINCT CASE WHEN A.info= A.pre_date THEN A.player_id END)
    , COUNT(DISTINCT A.player_id)
FROM (
    SELECT *
        , LAG(event_date) OVER (PARTITION BY player_id ORDER BY event_date) AS info
        , DATE_SUB(event_date, INTERVAL 1 day) AS pre_date
    FROM Activity
    ) AS A

-- 2번 쿼리
SELECT ROUND(COUNT(DISTINCT CASE WHEN A.info= A.pre_date THEN A.player_id END)/COUNT(DISTINCT A.player_id),2) AS fraction
FROM (
    SELECT *
        , LAG(event_date) OVER (PARTITION BY player_id ORDER BY event_date) AS info
        , DATE_SUB(event_date, INTERVAL 1 day) AS pre_date
    FROM Activity
    ) AS A

답변 2

0

Gemma님의 프로필 이미지
Gemma
지식공유자

주아님 안녕하세요:)

제가 직접 추가한 데이터 기준이 아닌, leetcode로 주아님의 상황을 재현해보았습니다.

 

1번 쿼리로 leetcode에서 Submit 하면, 애초에 분수가 아닌 2개 컬럼의 쿼리이기 때문에

Test case 0번째에서 fail이 납니다.

스크린샷 2024-09-18 오전 8.02.45.png

 

2번 쿼리로 leetcode에서 Submit 하면, 분수의 형태이기 때문에 초반 몇 개의 test case에서는 통과합니다. 하지만 결국에는 Test case 6번째에서 fail이 납니다.

스크린샷 2024-09-18 오전 8.03.57.png

 

테스트 케이스의 데이터가 다르기 때문에 숫자가 다르게 나타났던 것입니다.

혹시 이해가 안가는 부분이 있다면, 편하게 다시 질문 부탁드립니다:)

0

안녕하세요, 인프런 AI 인턴입니다.

김주아 님의 질문에 대해 자세히 답변드리겠습니다. 질문 내용은 쿼리의 논리적 차이로 인해 두 가지 쿼리의 결과가 다른 이유를 설명하는 것입니다. 두 쿼리의 비율이 다른 값으로 나타나는 이유는 쿼리 내 COUNT와 조건문의 사용 방식으로 인해 결과가 달라질 수 있기 때문입니다.

쿼리 1의 역할:
1. COUNT(DISTINCT CASE WHEN A.info = A.pre_date THEN A.player_id END) 은 조건을 만족하는 player_id를 기준으로 고유한 수를 셉니다.
2. COUNT(DISTINCT A.player_id)는 모든 고유한 player_id를 셉니다.

쿼리 2의 역할:
1. 쿼리 1의 각 결과를 ROUND() 함수를 통해 비율 계산하도록 합니다.
2. 최종적으로 CASE 문에 걸리는 값들의 비율을 구합니다.

주아 님의 경우, 각 쿼리가 각자의 역할을 다하고 있지만, CASE WHEN으로 사용된 조건 및 계산 방식이 차이의 원인으로 보입니다.

기존 답변의 참고 URL

이해를 돕기위한 유사한 상황을 다루고 있는 기존 답변들을 아래에 첨부해드리겠습니다. 여기엔 보다 자세한 설명과 여러 유사한 문제에 대한 해결 방안을 다루고 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김주아님의 프로필 이미지
김주아

작성한 질문수

질문하기