<ONLINE_SALE> & <OFFLINE_SALE> 테이블 구조
<문제>
<문제 풀이>
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE YEAR(SALES_DATE) = '2022' AND MONTH(SALES_DATE) = '3'
UNION ALL
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE YEAR(SALES_DATE) = '2022' AND MONTH(SALES_DATE) = '3'
ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC;
기존 문제들이 가로병합 개념으로 생각하는 JOIN함수를 메인으로 문제가 나왔다면 이번 문제는 반대로 세로병합을 위한 UNION 함수를 이용하는 문제였다!
우선은 ONLINE 테이블의 컬럼 갯수가 더 많기 때문에 먼저 문제의 요구에 맞게 ONLINE 테이블을 작성하였다.
그 후 OFFLINE 테이블 작성 후 OFFLINE 에 없는 USER_ID 컬럼을 만들어 줘야한다. 해당 컬럼을 그냥 NULL값으로 만들면 된다.
그 다음 위에서 만든 2개의 테이블을 UNION ALL 함수를 이용해 연결하여 주고, ORDER절을 요구사항에 맞게 작성하였다.
* UNION 함수 : 중복된 값을 제거하고 쿼리의 결과를 합치는 함수
* UNION ALL 함수 : 중복된 값을 제거하지 않고 쿼리의 결과를 합치는 함수
'IT > SQL' 카테고리의 다른 글
[MySQL] 프로그래머스 - 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 (0) | 2024.01.29 |
---|---|
[MySQL] 프로그래머스 - 입양 시각 구하기(2) (0) | 2024.01.29 |
[MySQL] 프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기 (1) | 2024.01.29 |
[MySQL] 프로그래머스 - 주문량이 많은 아이스크림들 조회하기 (0) | 2024.01.25 |
[MySQL] 프로그래머스 - 저자 별 카테고리 별 매출액 집계하기 (0) | 2024.01.25 |