inblog logo
|
An's Blog
    코딩테스트SQL

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

    윤설안's avatar
    윤설안
    May 01, 2025
    [코딩테스트] 40. 년, 월, 성별 별 상품 구매 회원 수 구하기
    Contents
    테이블 index문제예시풀이

    테이블 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
    Contents
    테이블 index문제예시풀이

    An's Blog

    RSS·Powered by Inblog