Dev Hyeri

◖코딩 테스트◗▬▬▬▬▬▬▬▬▬/프로그래머스

[SQL KIT] (2024) 오프라인/온라인 판매 데이터 통합하기(설명/코드/정답)

_hyeri 2024. 1. 18. 19:22

 

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131537

POINT.

  1. 날짜 함수 
  2. UNION

코드.

SELECT
    DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
    PRODUCT_ID,
    USER_ID,
    SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE ('2022-03%')
UNION
SELECT
    DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
    PRODUCT_ID,
    NULL AS USER_ID,
    SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE ('2022-03%')
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

 

내부 동작 순서 

 

1. ONLINE_SALE 테이블에서의 처리

FROM 절: ONLINE_SALE 테이블에서 데이터를 가져옵니다.
WHERE 절: SALES_DATE가 '2022-03'으로 시작하는 행을 필터링합니다.
SELECT 절: DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE로 날짜 형식을 'YYYY-MM-DD'로 변환하고, PRODUCT_ID, USER_ID, SALES_AMOUNT를 선택합니다.

 

2. OFFLINE_SALE 테이블에서의 처리

FROM 절: OFFLINE_SALE 테이블에서 데이터를 가져옵니다.
WHERE 절: SALES_DATE가 '2022-03'으로 시작하는 행을 필터링합니다.
SELECT 절: DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE로 날짜 형식을 'YYYY-MM-DD'로 변환하고, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT를 선택합니다.

 

3. UNION 절

ONLINE_SALE의 결과와 OFFLINE_SALE의 결과를 합칩니다.
중복된 행은 제거됩니다.

 

4. ORDER BY 절

SALES_DATE를 기준으로 오름차순 정렬합니다.
그다음으로, 같은 판매일인 경우 PRODUCT_ID를 기준으로 오름차순 정렬합니다.
마지막으로, 같은 판매일과 같은 상품 ID인 경우 USER_ID를 기준으로 오름차순 정렬합니다.

 

SALES_DATE PRODUCT_ID USER_ID SALES_AMOUNT
2022-03-01 3 98 1
2022-03-01 27 70 1
2022-03-03 1 68 1
2022-03-03 24 170 1
2022-03-06 4 140 1
2022-03-06 6 68 1
2022-03-06 21 126 2
2022-03-07 29 103 2

 

초기 코드

 

SELECT * 
FROM 
    (SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
     FROM ONLINE_SALE
     WHERE SALES_DATE LIKE ('2022-03%')
     UNION
     SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, 'NULL' AS USER_ID, SALES_AMOUNT	
     FROM OFFLINE_SALE
     WHERE SALES_DATE LIKE ('2022-03%')) AS A
ORDER BY A.SALES_DATE ASC, A.PRODUCT_ID ASC, A.USER_ID ASC

 

SALES_DATE PRODUCT_ID USER_ID SALES_AMOUNT
2022-03-01 3 98 1
2022-03-01 27 70 1
2022-03-03 1 68 1
2022-03-03 24 170 1
2022-03-06 4 140 1
2022-03-06 6 68 1
2022-03-06 21 126 2
2022-03-07 29 103 2

 

=>오류

 

 

 

오류 원인

1. UNION 사용의 이해 부족 --> 집합연산자 문법 이해 보강