[코딩테스트] 40. 년, 월, 성별 별 상품 구매 회원 수 구하기

편준민's avatar
May 01, 2025
[코딩테스트] 40. 년, 월, 성별 별 상품 구매 회원 수 구하기

테이블 index

📌

JOINED

Column name
Type
Nullable
USER_ID
INTEGER
FALSE
GENDER
TINYINT(1)
TRUE
AGE
INTEGER
TRUE
JOINED
DATE
FALSE

ONLINE_SALE

Column name
Type
Nullable
ONLINE_SALE_ID
INTEGER
FALSE
USER_ID
INTEGER
FALSE
PRODUCT_ID
INTEGER
FALSE
SALES_AMOUNT
INTEGER
FALSE
SALES_DATE
DATE
FALSE

문제

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

예시

notion image

풀이

ONLINE_SALE에 있는 데이터만으로 필요한 데이터를 출력이 불가능 하기 때문에 join을 이용하였다.
SELECT * from ONLINE_SALE o left outer join USER_INFO u ON o.USER_ID = u.USER_ID
문제에서 성별의 정보가 없는 경우는 제외해달라고 했기 때문에. is not null을 이용
SELECT * from ONLINE_SALE o left outer join USER_INFO u ON o.USER_ID = u.USER_ID where u.gender is not null
그룹을 묶어서 상품을 구매한 회원 수를 집계 해야함으로, year month gender 순으로 group by해주었다.
SELECT * from ONLINE_SALE o left outer join USER_INFO u ON o.USER_ID = u.USER_ID where u.gender is not null group by year(sales_date), month(sales_date), gender order by year(sales_date), month(sales_date), gender
이후 내가 필요한 정보만을 출력
SELECT year(sales_date) YEAR, month(sales_date) MONTH, gender, count(u.user_id) USERS from ONLINE_SALE o left outer join USER_INFO u ON o.USER_ID = u.USER_ID where u.gender is not null group by year(sales_date), month(sales_date), gender order by year(sales_date), month(sales_date), gender
하지만 오답! 이유는 중복으로 상품을 구매한 유저가 있기 때문에 distinct를 해주어서 중복된 user_id를 제외 시켜주었다
SELECT year(sales_date) YEAR, month(sales_date) MONTH, gender, count(distinct u.user_id) USERS from ONLINE_SALE o left outer join USER_INFO u ON o.USER_ID = u.USER_ID where u.gender is not null group by year(sales_date), month(sales_date), gender order by year(sales_date), month(sales_date), gender
notion image
notion image
 
Share article

YunSeolAn