-
728x90
문제 설명
다음은 어느 의류 쇼핑몰의 온라인 상품 판매 정보를 담은 ONLINE_SALE 테이블과 오프라인 상품 판매 정보를 담은 OFFLINE_SALE 테이블 입니다. ONLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 온라인 상품 판매 ID, 회원 ID, 상품 ID, 판매량, 판매일을 나타냅니다.
동일한 날짜, 회원 ID, 상품 ID 조합에 대해서는 하나의 판매 데이터만 존재합니다.
OFFLINE_SALE 테이블은 아래와 같은 구조로 되어있으며 OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE는 각각 오프라인 상품 판매 ID, 상품 ID, 판매량, 판매일을 나타냅니다.문제
ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.
답안
-- 코드를 입력하세요 SELECT date_format(sales_date ,'%Y-%m-%d') as sales_date, product_id, user_id, sales_amount FROM online_sale WHERE sales_date like '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 sales_date like '2022-03%' ORDER BY 1,2,3
RIGHT JOIN을 써야하나 LEFT JOIN을 써야하나 짱구를 굴려봤는데 도저히 답이 안나와서 질문하기를 보니
UNION ALL을 이용하란 말에 비룡 마냥 정신이 번쩍 들었다.
DB에서 UNION이란 집합연산자로 JOIN을 사용하지 않고 연관된 데이터를 조회하는 방법이다.
사용방법은 두개의 SELECT 문 사이에 UNION을 위치시키고 두개의 SELECT문의 컬럼 수 , 컬럼 타입을 일치시키는 것이다.
집합연산자는 UNION, UNION ALL이 있는데 중복된 항도 나오게 하기 위해선 UNION ALL을 이용해야 한다.
마지막 정렬 부분에 1,2,3은 컬럼 순서를 나타낸다. 저 의미대로라면 sales_date로 오름차순, product_id로 오름차순, user_id로 오름차순하라는 뜻이다.
728x90'database > coding test' 카테고리의 다른 글
IS NULL - 경기도에 위치한 식품창고 목록 출력하기 (0) 2023.08.31 SELECT - 조건에 맞는 회원수 구하기 (0) 2023.08.31 SELECT - 재구매가 일어난 상품과 회원 리스트 구하기 (0) 2023.08.29 SELECT - 12세 이하인 여자 환자 목록 출력하기 (0) 2023.08.29 SELECT - 평균 일일 대여 요금 구하기 (0) 2023.08.29