본문 바로가기

CS/SQL Problem

[Programmers] GROUP BY > 년, 월, 성별 별 상품 구매 회원 수 구하기

 

 

프로그래머스

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

programmers.co.kr

 

문제


핵심

JOIN

이 문제에서는 필요한 정보(년, 월 / 성별)가 두 테이블에 걸쳐 나누어져있습니다.

따라서 두 테이블을 합치는게 선행되어야 하고 이를 위해 JOIN을 이용합니다.

 

GROUP BY

문제의 조건에 언급된 '년, 월, 성별 별로'는 'GROUP BY 년, 월, 성별' 구문과 의미가 정확히 일치합니다.

그룹으로 묶었기 때문에 그 안에 여러 레코드가 포함되어 있을 것입니다.

집계 함수를 사용하면 그 정보를 가공하여 표현할 수 있습니다.

여기선 COUNT를 이용해서 사용자의 수를 표현하였습니다.

 

DISTINCT

출력 조건을 보면 [년, 월, 성별] 별로 상품을 구매한 회원 수를 집계하라고 되어있습니다. 

해당 월에 구매한 횟수가 아니라 구매한 회원 수(남자 수, 여자 수)를 출력하는 것 입니다.

즉, 한 유저가 여러 번에 걸쳐 구매했더라도 구매한 회원 수는 1 이겠죠.

여기선 중복을 제거하는 DISTINCT 키워드를 이용하여 이를 처리하였습니다.


구현

Code

SELECT 
	YEAR(SALES_DATE) AS YEAR, 
	MONTH(SALES_DATE) AS MONTH, 
	GENDER, 
	COUNT(DISTINCT USER_ID) AS USERS 
FROM USER_INFO

JOIN ONLINE_SALE
USING (USER_ID)
WHERE GENDER IS NOT NULL
GROUP BY YEAR, MONTH, GENDER
ORDER BY YEAR, MONTH, GENDER
728x90
반응형