출처
문제
USER_INFO 테이블과 ONLINE_SALE 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계하는 SQL문을 작성해주세요. 결과는 년, 월, 성별을 기준으로 오름차순 정렬해주세요. 이때, 성별 정보가 없는 경우 결과에서 제외해주세요.
문제에 대한 해석
-- 조회: 테이블에서 년, 월, 성별 별로 상품을 구매한 회원수를 집계
-- 정렬: 년, 월, 성별을 기준으로 오름차순
-- 조건: 성별 정보가 없는 경우 결과에서 제외
풀이(MYSQL)
select Year(o.sales_date), month(o.sales_date), u.gender,count(distinct(o.user_id))
from user_info u join online_sale o on u.user_id = o.user_id
where u.gender is not null
group by 1,2,3
order by 1,2,3
작동순서
💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환
- FROM 절: user_info와 online_sale를 user_id기준으로 inner join
- WHERE 절: gender의 데이터가 null값이 없는걸로 필터링
- GROUP BY 절:sales_date의 년도별, 월별, gender별로 그룹화
- SELECT 절: sales_date의 년도, sales_date의 월, gender 별 고유의 user_id 수 조회
- ORDER BY 절: sales_date의 년도, sales_date의 월, gender 의 오름차순
배운점
- 회원수를 구하는 것이 목적이므로 중복되는 user_id를 제외한 distinct로 집계
'문제풀이' 카테고리의 다른 글
Pandas와 SQL 11~13번 문제 (0) | 2024.03.21 |
---|---|
Pandas와 SQL 5~10번 문제 (0) | 2024.03.20 |
Pandas와 SQL 1~4번 문제 (0) | 2024.03.19 |