우당탕탕 개발일지

[SQL] 프로그래머스 SELECT: 오프라인/온라인 판매 데이터 통합하기 본문

SQL

[SQL] 프로그래머스 SELECT: 오프라인/온라인 판매 데이터 통합하기

민아당긴아 2024. 2. 2. 16:31

문제 링크

 

프로그래머스

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

programmers.co.kr

문제 설계

1. ONLINE_SALE과 OFFLINE_SALE 두 테이블의 정보를 세로로 합쳐야 하니까 UNION 사용

2. 날짜를 출력할 때 형식을 맞춰야 하니까 DATE_FORMAT(열이름, 형식 지정자)을 사용해야 한다.
이 문제에서 형식은 "2022-03-01"이니까 "%Y-%m-%d"가 형식 지정자가 된다. 

3. OFFLINE_SALE 테이블에서 USER_ID 값은 NULL로 표시해야 하기 때문에 SELECT문에서 NULL AS USER_ID 사용해야 한다.

4. 2022년 3월의 판매 데이터를 가져오는 것이므로 WHERE SALES_DATE LIKE "2022-03%"라고 해야 한다.

5. 마지막 오름차순 정렬 잊지 말기!

SQL 코드

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
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 SALES_DATE, PRODUCT_ID, USER_ID

기억할 내용

1. 날짜 포맷을 나타내는 형식 지정자

  • "%Y": 4자리 연도를 표시. 예를 들어, 2022, 2023 등의 형태로 표현.
  • "%m": 2자리 월을 표시. 예를 들어, 01, 02, ..., 12 등의 형태로 표현.
  • "%d": 2자리 일을 표시. 예를 들어, 01, 02, ..., 31 등의 형태로 표현.
  • "%H": 24시간 형식의 시간을 표시(예: 00, 01, ..., 23).
  • "%M": 분을 표시 (예: 00, 01, ..., 59).
  • "%S": 초를 표시(예: 00, 01, ..., 59).

2. % 와일드카드 문자

  • %ABC = ABC로 시작하는 모든 문자열과 일치하는 것을 의미
  • ABC% = ABC로 끝나는 모든 문자열과 일치하는 것을 의미

3. 열이 특정 문자와 같을 때 =이 아니라 LIKE를 쓴다. WHERE SALES_DATE LIKE "2022-03%"

4. 열이 통째로 전부 NULL값일 때, NULL AS 열이름을 쓴다. NULL AS USER_ID