본문 바로가기
프로그래밍/SQL

[SQL 고득점 Kit - SELECT] 오프라인/온라인 판매 데이터 통합하기, UNION, IFNULL()

by hi-rachel 2023. 1. 12.

✏️  문제

 

✏️  정답

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, IFNULL(USER_ID, NULL) AS USER_ID, SALES_AMOUNT
FROM (
    SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT FROM ONLINE_SALE
    UNION
    SELECT SALES_DATE, PRODUCT_ID, NULL, SALES_AMOUNT FROM OFFLINE_SALE
) A
WHERE MONTH(SALES_DATE) = 3
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID;

문제에서 'OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해 주세요.'이라는 조건이 있기 때문에 IFNULL을 사용해 준다.

※ 뒤에 A(아무거나)라고 별칭(alias)을 써주지 않으면 오류가 난다.

 

IFNULL()

IFNULL() 함수는 식이 NULL인 경우 지정된 값을 반환한다. 표현식이 NOT NULL이면 이 함수는 표현식을 반환한다.

-- Syntax
IFNULL(expression, alt_value)

-- Parameter Values
-- expression(필수) : expression이 NULL인지 아닌지 확인한다
-- alt_value(필수) : expression이 NULL이면 alt_value을 반환한다

 

UNION

UNION 연산자둘 이상의 SELECT 명령문의 결과 집합을 결합하는 데 사용된다.

  • 사용 조건
    • UNION 안에 모든 SELECT 명령문은 동일한 수의 열이 있어야 한다.
    • 열의 데이터 유형도 유사(similar data type) 해야 한다.
    • 모든 SELECT 명령문의 열도 동일한 순서여야 한다.
-- UNION Syntax
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

 

UNION 연산자는 기본적으로 고유한 값만 선택한다. 중복 값을 허용하려면 UNION ALL을 사용해야 한다.

-- UNION ALL Syntax
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

 

날짜 설정은 아래 글 참고

2023.01.10 - [SQL] - [SQL 고득점 kit - SELECT] 3월에 태어난 여성 회원 목록 출력하기 / 'YEAR-MONTH-DATE' 형태로 보여주기

 

[SQL 고득점 kit - SELECT] 3월에 태어난 여성 회원 목록 출력하기 / 'YEAR-MONTH-DATE' 형태로 보여주기

▶ 'YEAR-MONTH-DATE' 형태로 변환 방법 1992-03-16 00:00:00 이렇게 뒤에 나오는 시간을 없애려면 1. DATE_FORMAT(COLUMN명, '%Y-%m-%d') AS [하고 싶은 COLUMN명]을 해주면 된다. (AS는 선택) 참고로 DATE_FORMAT(COLUMN명, '%y-

hi-rachel.tistory.com

 

 

😃 공부하면서 적는 글입니다. 공감이나 피드백 환영합니다.