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

풀이
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


Share article