본문 바로가기
SQL

programmers : 년, 월, 성별 별 상품 구매 회원 수 구하기

by sooyeoon 2022. 12. 23.

 

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

 

SELECT YEAR(OS.SALES_DATE) YEAR, MONTH(OS.SALES_DATE) MONTH, UI.GENDER GENDER, COUNT(DISTINCT USER_ID) USERS
FROM USER_INFO UI JOIN ONLINE_SALE OS
USING(USER_ID)
WHERE UI.GENDER IS NOT NULL
GROUP BY YEAR(OS.SALES_DATE), MONTH(OS.SALES_DATE), UI.GENDER
ORDER BY YEAR, MONTH, GENDER ASC ;

GROUP BY 로 연도, 월, 성별을 나눈 뒤, 회원 수를 COUNT했다.

이때, 중요한 점은 DISTINCT 부분인 것 같다.

처음에는 DISTINCT 없이 COUNT만 해서 제출해서 오답이 나왔는데, 

 

 

해당 예시 테이블에서 USER_ID가 1인 사용자가 1월에 두 번 이상 구매했다면 회원 수를 COUNT할 때 중복이 되므로 DISTINCT를 사용해야겠다는 생각이 들었고, 쿼리에서 COUNT 연산에 DISTINCT를 추가로 입력했더니 정답 처리가 되었다.

 

+) USING → ON , WHERE → HAVING 

SELECT에서 COUNT 연산은 WHERE - GROUP BY - HAVING 이후 순서이므로, NOT NULL 조건은 HAVING에 걸어주어도 같은 결과가 나온다!

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