개인공부/알고리즘

프로그래머스 - 년, 월, 성별 별 상품 구매 회원 수 구하기

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