Sql
title: 2026-01-11 author: 강병호 (이름) date: 2026-01-11 (날짜) category: TIL/강병호/2026/01 (파일 경로 : TIL/{이름}/{연}/{월}) layout: post (자유) —
-
오프라인/온라인 판매 데이터 통합하기
https://school.programmers.co.kr/learn/courses/30/lessons/131537
문제 설명
- 2022년 3월의 오프라인/온라인 상품 판매 데이터
- 판매 날짜, 상품 ID, 유저 ID, 판매량 출력
- OFFLINE_SALE 테이블 USER_ID → NULL
- 판매일 기준 오름차순 정렬, 상품 ID 기준 오름차순, 유저 ID 기준 오름차순 정렬
발생 에러
-
에러 1

제출 코드
-
1차 코드
-- 코드를 입력하세요 SELECT SALES_DATE, PRODUCT_ID, IFNULL(USER_ID, 'NULL'), COUNT(*) AS SALES_AMOUNT FROM ONLINE_SALE AS ON_S JOIN OFFLINE_SALE AS OFF_S ON ON_S.PRODUCT_ID = OFF_S.PRODUCT_ID WHERE SALES_DATE LIKE '2022-03%' GROUP BY SALES_DATE ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC -
2차 코드
-- 코드를 입력하세요 SELECT ON_S.SALES_DATE AS SALES_DATE, ON_S.PRODUCT_ID AS PRODUCT_ID, IFNULL(USER_ID, 'NULL') AS USER_ID, COUNT(*) AS SALES_AMOUNT FROM ONLINE_SALE AS ON_S JOIN OFFLINE_SALE AS OFF_S ON ON_S.PRODUCT_ID = OFF_S.PRODUCT_ID WHERE ON_S.SALES_DATE LIKE '2022-03%' GROUP BY ON_S.SALES_DATE ORDER BY SALES_DATE ASC, PRODUCT_ID ASC, USER_ID ASC -
3차 코드
-- 코드를 입력하세요 SELECT SALES_DATE AS SALES_DATE, PRODUCT_ID AS PRODUCT_ID, IFNULL(USER_ID, 'NULL') AS USER_ID, COUNT(*) AS SALES_AMOUNT FROM ONLINE_SALE UNION ALL SELECT SALES_DATE AS SALES_DATE, PRODUCT_ID AS PRODUCT_ID, NULL AS USER_ID, COUNT(*) AS SALES_AMOUNT FROM OFFLINE_SALECOUNT(*)의 잘못된 사용: 문제에서 요구하는SALES_AMOUNT는 해당 판매 기록에 이미 존재하는 컬럼 값입니다.COUNT(*)를 쓰면 판매 기록의 개수를 세게 되는데, 문제에서는 개별 판매 내역의 수량을 그대로 보여주길 원합니다.WHERE절 누락: 2022년 3월 데이터만 뽑아야 한다는 조건이 빠졌습니다.- 날짜 포맷: 출력 예시를 보면 날짜가
2022-03-01형식이어야 합니다. SQL의 기본 날짜형은 시간 정보를 포함할 수 있으므로DATE_FORMAT처리가 필요합니다. USER_ID의NULL처리: 오프라인 판매의 유저 ID는 문자열'NULL'이 아니라 실제NULL값으로 출력되어야 합니다.
-
정답 코드
-- 코드를 입력하세요 SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE, PRODUCT_ID, IFNULL(USER_ID, NULL) AS USER_ID, SALES_AMOUNT FROM ONLINE_SALE WHERE SALES_DATE LIKE '2022-03%' UNION ALL 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 ASC, PRODUCT_ID ASC, USER_ID ASC