SQL/문제풀이

[프로그래머스] 오프라인/온라인 판매 데이터 통합하기

응엉잉 2023. 12. 22. 09:46

https://school.programmers.co.kr/learn/courses/30/lessons/131537

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제를 읽고 든 생각

위아래롤 테이블을 이어붙여야한다 -- > UNION

(SELECT *
FROM ONLINE_SALE
 )

UNION

(SELECT *
FROM OFFLINE_SALE
 )

SQL 실행 중 오류가 발생하였습니다.
The used SELECT statements have a different number of columns

 

column 개수가 달라서 냅다 UNION은 안됨!

일단 2022년 3월의 온라인 판매 내역을 주어진 순서에 맞게 출력하기 위한 SQL문은 다음과 같다.

SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
    product_id,
    user_id,
    sales_amount
FROM online_sale
WHERE MONTH(sales_date) = 3

MONTH() 함수를 이용해서 3월의 데이터만 가져올 수 있다.

DATE_FORMAT() 함수를 이용해서 원하는 결과 형태로 날짜를 출력할 수 있다.

 

 

online_sale에는 user_id가 없다.

이러한 경우 SELECT 절에서 NULL 값을 user_id로 불러와서 NULL 값으로 채워주면 된다.

SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
    product_id,
    NULL AS user_id,
    sales_amount
FROM offline_sale
WHERE MONTH(sales_date) = 3

 

위 2개 코드를 UNION 해준 후, 원하는 조건에 따라서 정렬 해주면 끝!

(SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
    product_id,
    user_id,
    sales_amount
FROM online_sale
WHERE MONTH(sales_date) = 3)

UNION

(SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') AS sales_date,
    product_id,
    NULL AS user_id,
    sales_amount
FROM offline_sale
WHERE MONTH(sales_date) = 3)

ORDER BY sales_date, product_id, user_id