[코딩테스트] 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