USER_INFO 테이블과 ONLINE_SALE 테이블에서
년, 월, 성별 별로
상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요.
결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요.
이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
SELECT YEAR(O.SALES_DATE) AS YEAR, MONTH(O.SALES_DATE) AS MONTH, GENDER, COUNT(DISTINCT U.USER_ID) AS USERS
FROM USER_INFO U JOIN ONLINE_SALE O ON U.USER_ID=O.USER_ID
GROUP BY YEAR(O.SALES_DATE), MONTH(O.SALES_DATE), GENDER
HAVING GENDER IS NOT NULL
ORDER BY YEAR(O.SALES_DATE), MONTH(O.SALES_DATE), GENDER
문제 자체는 간단한 문제였는데, 같은 년, 같은 월, 같은 성별인 유저가 상품을 여러 번 살 수 있다는 사실을 간과해서 틀렸던 문제였다. 즉, 상품을 구매한 회원 수를 집계한 것이 아니라 상품을 구매한 건 수를 집계해버려서 틀렸다.
DISTINCT로 중복되는 USER_ID를 제거해서 문제를 해결했다.