[프로그래머스 Lv.4] 년, 월, 성별 별 상품 구매 회원 수 구하기

너구리로소이다·2023년 3월 14일
0

programmers-SQL

목록 보기
8/76

코딩테스트 연습 - 년, 월, 성별 별 상품 구매 회원 수 구하기

문제 설명

다음은 어느 의류 쇼핑몰에 가입한 회원 정보를 담은 USER_INFO 테이블과
온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블 입니다.
USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.

Column nameTypeNullable
USER_IDINTEGERFALSE
GENDERTINYINT(1)TRUE
AGEINTEGERTRUE
JOINEDDATEFALSE

GENDER 컬럼은 비어있거나 0 또는 1의 값을 가지며 0인 경우 남자를, 1인 경우는 여자를 나타냅니다.

ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며,
ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

Column nameTypeNullable
ONLINE_SALE_IDINTEGERFALSE
USER_IDINTEGERFALSE
PRODUCT_IDINTEGERFALSE
SALES_AMOUNTINTEGERFALSE
SALES_DATEDATEFALSE

동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.

문제

USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요.
결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.

예시

예를 들어 USER_INFO 테이블이 다음과 같고

USER_IDGENDERAGEJOINED
11262021-06-01
2NULLNULL2021-06-25
30NULL2021-06-30
40312021-07-03
51252021-07-09
61332021-07-14

ONLINE_SALE 테이블이 다음과 같다면

ONLINE_SALE_IDUSER_IDPRODUCT_IDSALES_AMOUNTSALES_DATE
115412022-01-01
21322022-01-25
343412022-01-30
4625332022-02-03
523122022-02-09
653512022-02-14
755712022-02-18

2022년 1월에 상품을 구매한 회원은 USER_ID 가 1(GENDER=1), 4(GENDER=0)인 회원들이고,
2022년 2월에 상품을 구매한 회원은 USER_ID 가 2(GENDER=NULL), 5(GENDER=1), 6(GENDER=1)인 회원들 이므로,

년, 월, 성별 별로 상품을 구매한 회원수를 집계하고, 년, 월, 성별을 기준으로 오름차순 정렬하면 다음과 같은 결과가 나와야 합니다.

YEARMONTHGENDERUSERS
2022101
2022111
2022212

풀이

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

1) ONLINE_SALE 테이블에서 YEAR, MONTH, USER_ID별로 조회.
2) 조회한 쿼리와 USER_INFO의 USER_ID로 조인조건을 걸어 조회.
3) 이때, USER_INFO의 GENDER가 NULL이 아닐 경우에만 조회하도록 조회조건 지정.
4) YEAR, MONTH, GENDER별로 YEAR, MONTH, GENDER로 오름차순 정렬(ASC)

profile
일단 해보자 뭐든 되겠지 😄

0개의 댓글