SQL/프로그래머스 SQL 고득점 kit
SQL 고득점 Kit / GROUP BY / 년,월,성별 별 상품 구매 회원 수 구하기 /MySQL
박혀노
2023. 10. 31. 11:03
728x90
📚문제
📝풀이
SELECT YEAR(O.SALES_DATE) AS YEAR
, MONTH(O.SALES_DATE) AS MONTH
, U.GENDER
, COUNT(DISTINCT U.USER_ID) AS USERS
FROM USER_INFO U
INNER JOIN ONLINE_SALE O ON U.USER_ID = O.USER_ID
WHERE U.GENDER IS NOT NULL
GROUP BY YEAR(O.SALES_DATE),MONTH(O.SALES_DATE),U.GENDER
ORDER BY YEAR(O.SALES_DATE),MONTH(O.SALES_DATE),U.GENDER
이 문제에서 중요한 포인트는
COUNT(DISTINCT U.USER_ID) AS USERS
여기서 DISTINCT 를 해주는 것!
이 문장을 주는 이유를
생각해봤다
그렇다면
같은 날짜, 회원 ID, 상품 ID에 대해서는 당연히 1번의 판매기록 밖에 없을것이지만
같은 날짜, 회원 ID까지는 중복이 있을 수 있기 때문에
USER_ID에 중복제거를 해주어야 한다는 뜻
무슨 말이냐면
문제에서 주어진 예시를 들어보면
둘 다 1월에 구매한 내역이고
USER_ID가 1인 경우이다
(GENDER는 당연히 같을거고)
근데 이때 년,월,성별 별로 상품을 구매한 회원 수를 집계하는데(구매한 기록만 있으면 됨)
USER_ID의 중복을 제거해주지 않으면
USER_ID 1이 2번 들어가서
2명이 구매한 걸로 집계가 되버린다
(DISTINCT의 사용시기가 은근 헷갈린다..)
SELECT YEAR(O.SALES_DATE) AS YEAR
, MONTH(O.SALES_DATE) AS MONTH
, U.GENDER
, COUNT(DISTINCT O.USER_ID) AS USERS
FROM ONLINE_SALE O
JOIN USER_INFO U ON O.USER_ID = U.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR(O.SALES_DATE), MONTH(O.SALES_DATE),U.GENDER
ORDER BY YEAR,MONTH,GENDER
풀이는 완전 동일하지만
이번에는 DISTINCT의 사용을 놓치지 않고 해주었다🤓
728x90