개인공부/알고리즘
프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기
KEEMSY
2023. 8. 6. 21:49

프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나는 이번 문제의 해결을 위해서는 어떻게 구매한 회원수를 집계를 할 것인가가 핵심이라고 생각했다. 그리고 실제로 나는 해당 부분에서 어려움을 겪었다.
// 내가 작성한 쿼리
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