문제 설명
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으로 해야 정답처리 되는 문제였다..
이것 때문에 한참을 헤매다 결국 질문하기 찾아보게 됨..
'프로그래머스 - SQL' 카테고리의 다른 글
[SQL 문제] 자동차 대여 기록에서 대여 중/ 대여 가능 여부 구분하기 (=1) (0) | 2024.07.17 |
---|---|
[SQL 문제] 서울에 위치한 식당 목록 출력하기 (round 함수) (0) | 2024.07.17 |
[SQL 문제] 취소되지 않은 진료 예약 조회하기 (다중 join 사용) (0) | 2024.07.15 |
[SQL 문제] 조건에 부합하는 중고거래 상태 조회하기 (0) | 2024.07.15 |
[SQL 문제] 조건에 맞는 사용자 정보 조회하기 (0) | 2024.07.12 |