📌 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131537
📌 정답
(SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03')
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 DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03')
ORDER BY 1, 2, 3 ;
📌 시행착오
# SELECT DATE_FORMAT(A.SALES_DATE, '%Y-%m-%d') AS SALES_DATE, A.PRODUCT_ID, USER_ID, A.SALES_AMOUNT
# FROM ONLINE_SALE A LEFT OUTER JOIN OFFLINE_SALE B
# ON A.SALES_DATE = B.SALES_DATE AND
# A.PRODUCT_ID = B.PRODUCT_ID
# WHERE DATE_FORMAT(A.SALES_DATE, '%Y-%m') = '2022-03'
# ORDER BY 1, 2, 3 ;
💡포인트
- NULL AS USER_ID : NULL 빈 열 추가
- DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03' : 2022-03만 찾기
- () UNION ALL ()
: 괄호 쓰기
: 상위 SQL문과 하위 SQL문의 열 개수가 동일해야 UNION이 가능하다.
: 다를 경우 NULL 열을 추가하여 대체하는 방법이 있다.
: MYSQL은 FULL OUTER JOIN이 없으므로 (LEFT OUTER JOIN) UNION (RIGHT OUTER JOIN) 으로 가능하다.- ORDER BY 1, 2, 3 : ORDER BY 절은 가장 마지막에 기재
💡 질문과 피드백 사항은 댓글에 편하게 남겨주시기 바랍니다.
❤️ 도움이 되셨다면 공감 부탁드립니다.