해결된 질문
작성
·
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
주아님 안녕하세요:)
제가 직접 추가한 데이터 기준이 아닌, leetcode로 주아님의 상황을 재현해보았습니다.
1번 쿼리로 leetcode에서 Submit 하면, 애초에 분수가 아닌 2개 컬럼의 쿼리이기 때문에
Test case 0번째에서 fail이 납니다.
2번 쿼리로 leetcode에서 Submit 하면, 분수의 형태이기 때문에 초반 몇 개의 test case에서는 통과합니다. 하지만 결국에는 Test case 6번째에서 fail이 납니다.
테스트 케이스의 데이터가 다르기 때문에 숫자가 다르게 나타났던 것입니다.
혹시 이해가 안가는 부분이 있다면, 편하게 다시 질문 부탁드립니다:)
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
으로 사용된 조건 및 계산 방식이 차이의 원인으로 보입니다.
이해를 돕기위한 유사한 상황을 다루고 있는 기존 답변들을 아래에 첨부해드리겠습니다. 여기엔 보다 자세한 설명과 여러 유사한 문제에 대한 해결 방안을 다루고 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.