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

민정·2023년 7월 14일
0

코딩테스트

목록 보기
5/5

[SQL/Programmers]

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

ONLINE_SALE 테이블

OFFLINE_SALE 테이블

✅ 확인해야할 조건
1. ONLINE_SALE 과 OFFLINE_SALE 테이블을 합쳐야 한다
2. 판매 테이블들에서 3월의 판매에 대한 정보만 불러와야 한다
3. OFFLINE_SALE 테이블에는 USER_ID가 없다. 이 값을 NULL로 채워줘야 함
4. 정렬 순서 : 판매일 -> 상품ID -> 유저 ID 순으로 오름차순 정렬해주기

코드

-- 코드를 입력하세요
(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 ASC , PRODUCT_ID ASC,USER_ID ASC;

출력 결과

해결 방법
1. UNION을 사용해서 두 개의 테이블을 합쳐줘야 한다!!
2. 합칠때 각 테이블마다 조건을 걸어줌 (3월 인 데이터만 추출)
3. 오프라인 판매 테이블에는 USER_ID 가 없음 ! 컬럼이 똑같지 않으면 오류가 난다. 미리 NULL 값으로 채워주고 합쳐야 함 NULL AS USER_ID

기록


1. UNION

합집합

SELECT * FROM sample1
UNION
SELECT * FROM sample2;

UNION 사용할 때 ORDER BY는 !! 😤

UNION으로 테이블을 결합할 때 각 테이블마다 ORDER BY를 적용하여 정렬할 수 없음.🤯
ORDER BY를 지정할 때는 마지막 SELECT 명령에만 지정해야 함

UNION ALL
UNION 은 중복값이 존재하지 않음을 전제로 한다. 중복을 제거하지 않고 합치고 싶은 경우 UNION ALL 을 사용하면 된다.

SELECT * FROM sample1
UNION ALL
SELECT * FROM sample2
profile
공부 기록장

0개의 댓글