나는 이번 문제의 해결을 위해서는 어떻게 구매한 회원수를 집계를 할 것인가가 핵심이라고 생각했다. 그리고 실제로 나는 해당 부분에서 어려움을 겪었다.
// 내가 작성한 쿼리
SELECT DATE_FORMAT(OS.SALES_DATE, '%Y') AS YEAR
,DATE_FORMAT(OS.SALES_DATE, '%m') AS MONTH
,UI.GENDER
,COUNT(UI.USER_ID) AS USERS // 문제가 된 부분
FROM ONLINE_SALE AS OS
INNER JOIN USER_INFO AS UI ON OS.USER_ID = UI.USER_ID AND UI.GENDER IS NOT NULL
GROUP BY YEAR, MONTH, UI.GENDER
ORDER BY YEAR, MONTH, UI.GENDER
내가 작성한 쿼리의 문제는 한 유저가 특정 달에 한 유저가 여러번 구매할 경우, 하나로 측정하지 않고 여러번 측정하는 문제가 존재했다. 해당 부분은 문제에도 잘 나와있었는데, 내가 문제를 제대로 확인하지 못했다.. 문제를 잘 보자...!
// 정답
SELECT DATE_FORMAT(OS.SALES_DATE, '%Y') AS YEAR
,DATE_FORMAT(OS.SALES_DATE, '%m') AS MONTH
,UI.GENDER
,COUNT(DISTINCT UI.USER_ID) AS USERS // DISTINCT 를 통해 중복을 제거한다.
FROM ONLINE_SALE AS OS
INNER JOIN USER_INFO AS UI ON OS.USER_ID = UI.USER_ID AND UI.GENDER IS NOT NULL
GROUP BY YEAR, MONTH, UI.GENDER
ORDER BY YEAR, MONTH, UI.GENDER
728x90
'개인공부 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기 (SQL) (0) | 2023.08.20 |
---|---|
프로그래머스 - 입양 시각 구하기(2) SQL (0) | 2023.08.06 |
프로그래머스 - 직사각형 넓이 구하기 (Kotlin) (0) | 2023.08.01 |
프로그래머스 - 캐릭터의 좌표 (Kotlin) (0) | 2023.07.31 |
프로그래머스 - 동명 동물 수 찾기 (MySQL) (0) | 2023.07.30 |