티스토리 뷰

Lv4. 오프라인/온라인 판매 데이터 통합하기

문제

ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.

 

- ONLINE_SALE 테이블과 OFFLINE_SALE 테이블 두 개 테이블 합치기 → UNION ALL 이용

- OFFLINE_SALE 테이블의 USER_ID 값은 NULL로 표시 → NULL AS USER_ID 이용

- 2022년 3월의 오프라인/온라인 상품 판매 데이터만 추출 -> LEFT(날짜, 7) = '2023-03'

- 날짜 형식 바꿔주기 DATE_FORMAT

 

풀이 : UNION ALL 이용

(SELECT DATE_FORMAT(N.SALES_DATE,'%Y-%m-%d') AS SALES_DATE, N.PRODUCT_ID, N.USER_ID, N.SALES_AMOUNT FROM ONLINE_SALE AS N WHERE LEFT(SALES_DATE,7) = '2022-03') 
UNION ALL
(SELECT DATE_FORMAT(F.SALES_DATE,'%Y-%m-%d') AS SALES_DATE, F.PRODUCT_ID, NULL AS USER_ID, F.SALES_AMOUNT FROM OFFLINE_SALE AS F WHERE LEFT(SALES_DATE,7) = '2022-03')
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

- 말을 빙빙 돌려서 말해서 처음엔 뭐 JOIN 사용하라는 건가 싶었는데, 오프라인/온라인 상품 판매를 단순하게 행을 합쳐주면 되는 문제였음!!

- 얄코 강의 안 듣고 그냥 풀었다면 UNION ALL이 생각 안 났을 것 같은데 마침 오랜만에 UNION ALL을 복습한 상태였기에 기억이 났닿

- UNION ALL로 중복 포함 출력해주기

- NULL AS USER_ID 이런 식으로 해서 전부다 NULL값인 애들 만들어주기 !! 신박함!!!

- DATE_FORMAT이야 이제 뭐 익숙!