반응형
프로그래머스 SQL 고득점 Kit의 오프라인/온라인 판매 데이터 통합 문제의 답을 공유합니다.
*MySQL 버전입니다.
오프라인/온라인 판매 데이터 통합 문제 설명, 예시
- 데이터 타입은 INTEGER(INT), DATE가 있습니다.
- OFFLINE_SALE 테이블에는 USER_ID(유저 ID)가 없습니다.
- 날짜 데이터 형식이 2022-03-01입니다.
- NULL값이 보입니다.
오프라인/온라인 판매 데이터 통합 문제
- 두 테이블의 2022년 3월 판매 날짜, 상품ID, 유저 ID, 판매량 출력
- OFFLINE_SALE 테이블의 유저ID는 NULL값으로 표시
- ①판매일, ②상품ID, ③유저 ID 기준 오름차순 정렬
SELECT-오프라인/온라인 판매 데이터 통합 문제 답
저는 답을 입력하기 전에, 각 테이블의 3월 판매 데이터부터 먼저 확인했습니다.
- 3월 판매 데이터가 테이블 offline_sale에는 없고 onlie_sale에만 있습니다.
- sales_date에 날짜와 시간이 동시에 있습니다..;;?? (=DATETIME)
제 코드는 다음과 같습니다.
- 사실상 offline_sale에는 3월 판매 데이터가 없지만, 문제를 고려하여 UNION ALL 사용.
- DATETIME을 바꾸고자 DATE_FORMAT 사용.
- YYYY-MM-DD 형식을 위해, %Y-%m-%d 사용.
- UNION ALL 사용하려면 컬럼 개수를 맞춰야 합니다. 그래서 offline_sale의 SELECT문에 NULL (AS) user_id 사용.
- 이때 user_id의 데이터 타입이 INT이므로, NULL값은 NULL로 출력되기에 NULL user_id로만 입력함.
- 조건이 3월 판매 데이터이므로, WHERE 조건식에 LIKE 사용.
- ORDER BY는 컬럼 순서(숫자)로 입력.
문제에 대한 짧은 정리
- UINON | UNION ALL 사용 시, 모든 SELECT절의 컬럼 개수가 같아야 한다. 개수 맞춤이 필요하다면 NULL (AS) 입력.
- INT(INTEGER) 숫자 데이터 형식은 숫자 미입력시 NULL값
- '실무적인 쿼리를 위해, 옵티마이저 비교로 연습 해야겠다...'를 다시 한번 느꼈습니다.
반응형
'SQL > 프로그래머스 SQL' 카테고리의 다른 글
MySQL 프로그래머스 SQL 고득점 Kit 입양 시각 구하기(1) 문제 답 (0) | 2023.09.25 |
---|---|
MySQL 프로그래머스 SQL 고득점 Kit 고양이와 개는 몇 마리 있을까 문제 답 (0) | 2023.09.19 |
MySQL 프로그래머스 SQL 고득점 Kit 동명 동물 수 찾기 문제 답 (0) | 2023.09.14 |
MySQL 프로그래머스 SQL 고득점 Kit 성분으로 구분한 아이스크림 총 주문량 문제 답 (0) | 2023.09.13 |
MySQL 프로그래머스 SQL 고득점 Kit 최솟값 구하기 문제 답 (0) | 2023.09.08 |