[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/131537
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
해답
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') "SALES_DATE" --날짜 포맷을 지정해줍니다
, PRODUCT_ID
, USER_ID
, SALES_AMOUNT
FROM ONLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYY-MM') = '2022-03'
UNION ALL --두 SELECT문의 조회 결과를 중복을 제거하지 않고 합집합 연산을 진행합니다.
SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') "SALES_DATE"
, PRODUCT_ID
, NULL "USER_ID" --오프라인 판매는 유저ID를 NULL로 표시하라고 했으니 컬럼의 값을 NULL로 설정하고 컬럼 명 "USER_ID"로 설정합니다.
, SALES_AMOUNT
FROM OFFLINE_SALE
WHERE TO_CHAR(SALES_DATE, 'YYYY-MM') = '2022-03'
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;
사실 해당 문제에서 UNION을 사용하든, UNION ALL을 사용하든 정답에는 문제가 없다.
어째서?
'온라인' '오프라인'으로 중복이 있을 수 없는 엔티티(테이블)이기 때문에 어떠한 것을 사용해도 결과에 지장은 없는 것이다.
관련 개념
[SQL]UNION, UNION ALL 차이
UNION 란? 간단하게, 두 테이블의 '합집합'을 조회하는 것이다. 언제 사용하는가? 두 엔티티(테이블)가 하나의 엔티티(테이블)로 통합되어야 할 경우에 사용한다. 가장 연습될만한 예제를 첨부할테
jsum01.tistory.com
[SQL]MySQL Oracle_SQL의 날짜 포맷
MySQL - DATE_FORMAT(Column, 'DATE FORMAT') 구분 기호 상세 기호 역할 년 %Y 년도 - 4자리 (2021, 2019, 2059, ...) %y 년도 - 2자리 (21, 19, 59 , ...) 월 %M 긴 월(영문) %b 짧은 월(영문) %m 숫자 월 - 2자리 (01, 02, 03, ... , 12)
jsum01.tistory.com
'데이터베이스_Database > SQL' 카테고리의 다른 글
[SQL] Constraint, 제약조건 (0) | 2024.04.13 |
---|---|
[SQL]MySQL Oracle_SQL의 날짜 포맷 (2) | 2023.12.03 |
[SQL]UNION, UNION ALL 차이 (0) | 2023.12.03 |
[MySQL][프로그래머스_131536] 재구매가 일어난 상품과 회원리스트... (2) | 2023.11.30 |
[SQL]GROUP BY와 HAVING? (0) | 2023.11.23 |