이 험난한 세상에서어어~

년, 월, 성별 별 상품 구매 회원 수 구하기(MySQL) 본문

algorithm/코딩 테스트

년, 월, 성별 별 상품 구매 회원 수 구하기(MySQL)

토끼띠NJW 2023. 7. 21. 14:43

문제 설명

년, 월, 성별 별로 상품을 구매한 회원의 수를 구하는 문제이다.

https://school.programmers.co.kr/learn/courses/30/lessons/131532

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

첫 번째 접근

일단 두 테이블을 JOIN해준 후 년, 월, 성별 별로 묶어 줬다.

JOIN ONLINE_SALE OS
ON UI.USER_ID = OS.USER_ID
GROUP BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER

그리고 HAVING을 이용해서 GENDER가 NULL이 아닌 부분만 가지고 오도록 했다.

HAVING GENDER IS NOT NULL

문제 발생

자꾸만 틀렸다고 해서 풀이를 보니 내가 놓친 부분이 있었다.

바로 문제 설명에 나와있듯이 구매한 회원수를 집계하는 것이기에 회원은 중복해서 계산해주면 안 된다는 것. 그래서 USER 부분에 DISTINCT를 넣어주니 정답으로 나왔다.

코드

MySQL

SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE) AS MONTH, GENDER, COUNT(DISTINCT OS.USER_ID) AS USERS
FROM USER_INFO UI
JOIN ONLINE_SALE OS
ON UI.USER_ID = OS.USER_ID
GROUP BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER
HAVING GENDER IS NOT NULL
ORDER BY YEAR(SALES_DATE), MONTH(SALES_DATE), GENDER