[Programmers_SQL] 15. 오프라인/온라인 판매 데이터 통합하기

문정준's avatar
Mar 12, 2025
[Programmers_SQL] 15. 오프라인/온라인 판매 데이터 통합하기
 
💡
프로그래머스 SELECT 14. 오프라인/온라인 판매 데이터 통합하기

1. 문제 설명

notion image
 

2. 문제

notion image
 

3. 예시

notion image

4. 문제 풀이

-- 코드를 입력하세요 select date_format(sales_date, '%Y-%m-%d') sales_date, product_id, user_id, sales_amount from ( select sales_date, product_id, user_id, sales_amount from online_sale union all select sales_date, product_id, null user_id, sales_amount from offline_sale ) as total_sale where sales_date between '2022-03-01' and '2022-03-31' group by sales_date, product_id, user_id order by sales_date, product_id, user_id;
  • 1 Line : sales_date, product_id, user_id, sales_amount를 조회
    • sales_date의 date 표기에 유의 : date_format
    • SELECT date_format(sales_date, ‘%Y-%m-%d’) sales_date, product_id, user_id, sales_amount
  • 2 Line : ONLINE_SALE, OFFLINE_SALE의 테이블 조회 결과를 둘 다 합쳐서 가져와야 함
    • UNION ALL 사용 : 별칭 부여 필요
    • from ( ~~~~ ) as total_sale
  • 3 Line : sales_date, product_id, user_id, sales_amount를 조회
    • SELECT sales_date, product_id, user_id, sales_amount
  • 4 Line : ONLINE_SALE 테이블에서 조회
    • from ONLINE_SALE
  • 5 Line : 아래 결과와 합함
    • union all
  • 6 Line : sales_date, product_id, user_id, sales_amount를 조회
    • 오프라인 판매의 경우 user_id를 null로 처리
    • SELECT sales_date, product_id, null user_id, sales_amount
  • 7 Line : OFFLINE_SALE 테이블에서 조회
    • from OFFLINE_SALE
  • 8 Line : 2022년 3월 사이의 판매 데이터만 조회
    • where sales_date between ‘2022-03-01’ and ‘2022-03-31’
  • 9 Line : 동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재
    • 날짜, 상품 ID, 회원 ID로 그룹화
    • group by sales_date, product_id, user_id
  • 10 Line : 판매일을 기준으로 오름차순, 상품 ID를 기준으로 오름차순, 유저 ID를 기준으로 오름차순 정렬
    • order by sales_date, product_id, user_id

4. 결과 확인

notion image
notion image
Share article

sxias