문제
https://school.programmers.co.kr/learn/courses/30/lessons/131532
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
첫번째 답안 (오답)
SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(*) AS USERS
FROM ONLINE_SALE LEFT JOIN
(SELECT USER_ID, GENDER FROM USER_INFO) A
ON ONLINE_SALE.USER_ID = A.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER
위의 쿼리가 어디가 문제인지 알 수가 없었다.
ONLINE_SALE 테이블을 출력해보고 난 후 간과했던 부분을 알 수 있었다.
ONLINE_SALE 테이블에서 USER_ID가 중복된 데이터가 존재한다!
그렇기 때문에 join한 테이블에서 USER_ID의 중복을 없앤 후 년, 월, 성별 별 행 수를 구해야한다.
정답 답안
SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(DISTINCT A.USER_ID) AS USERS
FROM ONLINE_SALE LEFT JOIN
(SELECT USER_ID, GENDER FROM USER_INFO) A
ON ONLINE_SALE.USER_ID = A.USER_ID
WHERE GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER
'Database > MySQL' 카테고리의 다른 글
[MySQL] DATEDIFF, TIMEDIFF, PEROID_DIFF (0) | 2023.03.07 |
---|---|
[Programmers/MySQL] 상품을 구매한 회원 비율 구하기 (0) | 2023.02.22 |
[Programmers/MySQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.02.20 |
[Programmers/MySQL]대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (2) | 2023.02.16 |
[MySQL] NULL 처리 (0) | 2023.02.14 |