SQL/프로그래머스 SQL

MySQL 프로그래머스 SQL 고득점 Kit 오프라인/온라인 판매 데이터 통합 문제 답

진리뷰 2023. 9. 8. 09:00
반응형

 

 

MySQL-프로그래머스-SQL-고득점-Kit-오프라인온라인-판매-데이터-통합-문제-답-썸네일
오프라인/온라인 판매 데이터 통합

 
 
프로그래머스 SQL 고득점 Kit의 오프라인/온라인 판매 데이터 통합 문제의 답을 공유합니다.

*MySQL 버전입니다.

 
 

 

오프라인/온라인 판매 데이터 통합 문제 설명, 예시

 

  • 데이터 타입은 INTEGER(INT), DATE가 있습니다.
  • OFFLINE_SALE 테이블에는 USER_ID(유저 ID)가 없습니다.
  • 날짜 데이터 형식이 2022-03-01입니다.
  • NULL값이 보입니다.

 

프로그래머스-SQL-고득점-Kit-오프라인-온라인-판매-데이터-통합-문제-설명프로그래머스-SQL-고득점-Kit-오프라인-온라인-판매-데이터-통합-문제-예시
오프라인 온라인 판매 데이터 통합 문제 설명(좌), 예시(우)

 
 

 

오프라인/온라인 판매 데이터 통합 문제

 

  • 두 테이블의 2022년 3월 판매 날짜, 상품ID, 유저 ID, 판매량 출력
  • OFFLINE_SALE 테이블의 유저ID는 NULL값으로 표시
  • ①판매일, ②상품ID, ③유저 ID 기준 오름차순 정렬

 

프로그래머스-SQL-고득점-Kit-오프라인-온라인-판매-데이터-통합-문제
오프라인 온라인 판매 데이터 통합 문제

 

 

 

SELECT-오프라인/온라인 판매 데이터 통합 문제 답

 
저는 답을 입력하기 전에, 각 테이블의 3월 판매 데이터부터 먼저 확인했습니다.

  • 3월 판매 데이터가 테이블 offline_sale에는 없고 onlie_sale에만 있습니다.
  • sales_date에 날짜와 시간이 동시에 있습니다..;;?? (=DATETIME)

 

sales_date-offline-salesales-date-online
오프라인/온라인 판매 데이터 통합 문제, 3월 판매 데이터 확인

 
 
제 코드는 다음과 같습니다.

  •  사실상 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는 컬럼 순서(숫자)로 입력.

 
 

프로그래머스-SQL-고득점-Kit-오프라인-온라인-판매-데이터-통합-문제-답
오프라인 온라인 판매 데이터 통합 문제 답

 
 

 

문제에 대한 짧은 정리

 

  • UINON | UNION ALL 사용 시, 모든 SELECT절의 컬럼 개수가 같아야 한다. 개수 맞춤이 필요하다면 NULL (AS) 입력.
  • INT(INTEGER) 숫자 데이터 형식은 숫자 미입력시 NULL값
  • '실무적인 쿼리를 위해, 옵티마이저 비교로 연습 해야겠다...'를 다시 한번 느꼈습니다.
반응형
top