hello, world!

[Programmers] 오프라인/온라인 판매 데이터 통합하기(테이블 합치기: 집합함수 정리) 본문

Programmers/sql

[Programmers] 오프라인/온라인 판매 데이터 통합하기(테이블 합치기: 집합함수 정리)

ferozsun 2023. 10. 28. 13:22

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

 

프로그래머스

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

programmers.co.kr


테이블을 Row 방향으로 합치기

- 집합연산자: UNION, UNION ALL, INTERSECT, MINUS

SELECT 컬럼1, 컬럼2
FROM 테이블1
집합 연산자 -- UNION, UNION ALL, INTERSECT, MINUS
SELECT 컬럼1, 컬럼2
FROM 테이블2
  • UNION
    • 합집합 (중복 행 한번만 출력)
  • UNION ALL
    • 합집합 (중복 그대로 놔둠)
  • INTERSECT
    • 교집합 (중복 행 제거)
  • MINUS EXCEPT
    • 차집합: 테이블1 - 테이블2 (중복 행 제거)

두 테이블의 열 개수가 동일할 때만 위 연산 가능 (개수만 맞으면 맨 위 테이블의 컬럼이름으로 테이블 만들어짐)

ORDER BY는 맨 아래 테이블 밑에 적으면 전체 적용됨


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

SELECT SUBSTR(SALES_DATE, 1, 10) SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM
((SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE LIKE '2022-03%')
UNION ALL
(SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE LIKE '2022-03%')) A
ORDER BY A.SALES_DATE, A.PRODUCT_ID, A.USER_ID
;
Comments