본문 바로가기
Study/SQL

SQL 고득점 Kit - Select (오프라인/온라인 판매 데이터 통합하기)

by Wanooky 2023. 2. 17.

Select는 조건에 맞는 값만 불러오면 된다. 다만, 반올림, 합계 등 다양한 함수에 대해서 기본적으로 알고 있어야 하므로 

 

함수에 대한 숙지가 필요한 부분이다.

 

문제는 다음과 같다.

 

https://school.programmers.co.kr/learn/courses/30/lessons/131537

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

일단 우선적으로, 두 테이블을 합치는 Union과 Union All 의 차이를 파악해야한다.

 

본인은 테이블을 합친다고 해서 Join을 사용할 줄.. 알았으나 Join은 각 테이블 별로 칼럼이 2개 생기기 때문에

 

Union 또는 Union All을 사용하여 해야한다.

 

Union은 중복된 데이터를 삭제하고, Union All은 중복된 데이터를 동시에 포함한다.

 

다만 위의 문제에서는 중복 문제가 발생하지 않으므로 어느 합집합 함수를 쓰던 상관은 없다.

 

sales_date가 위와 같은 형식인데, 정답은 year-month-day 형태로 나타나길 원하므로, 이를 변형하는 함수를 써야한다.

 

이때 사용하는 함수가 date_format이다. date_format('%Y-%m-%d', sales_date) as sales_date 로 변경한다.

 

offline_sale 데이터에는 user_id가 없는데, 이는 null as user_id로 처리하여 null 값이 들어가게끔 하면 된다.

 

이 세가지를 생각하여 코드를 작성하면 다음과 같다.

 

(select date_format('%Y-%m-%d', sales_date) as sales_date, product_id, user_id, sales_amount
		from online_sale where sales_date like '2022-03%')
union all
(select date_format('%Y-%m-%d', sales_date) as sales_date, product_id, null as user_id, sales_amount
		from offline_sale where sales_date like '2022-03%')
order by sales_date, product_id, user_id;