프로그래머스 - SQL

[SQL 문제] 년, 월, 성별 별 상품 구매 회원 수 구하기

DorYi 2024. 7. 17. 10:22

문제 설명

 USER_INFO 테이블은 아래와 같은 구조로 되어있으며 USER_ID, GENDER, AGE, JOINED는 각각 회원 ID, 성별, 나이, 가입일을 나타냅니다.

 ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며, ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.

 

문제

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

 

문제 풀이

select DATE_FORMAT(o.SALES_DATE, '%Y') YEAR,
       DATE_FORMAT(o.SALES_DATE, '%m') MONTH,
       u.gender,
       count(distinct u.user_id) USERS
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

 

1. 판매 날짜를 년과 월 별로 나누어 컬럼을 만들어줘야 함

2. 회원수를 집계하는 > count 사용

3. 오름차순 정렬

4. 정보 없는 경우 결과에서 제외 > is not null

5. date_format에 substr을 써도 됨!

 

출력 예시 month에 01이 아닌 1로 나와서 date_format (~, '%c')를 사용했는데 알고보니 %m으로 해야 정답처리 되는 문제였다..

이것 때문에 한참을 헤매다 결국 질문하기 찾아보게 됨..