
문제
https://school.programmers.co.kr/learn/courses/30/lessons/131537
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
- ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성
- OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시
- 결과는 판매일, 상품 ID, 유저 ID 순으로 오름차순 정렬
핵심 정리


- 이 문제는 모든 판매 기록을 합쳐서 보여줘야 하며, 중복이 자연스럽게 존재할 수 있음
- 예: SALES_DATE, PRODUCT_ID가 같더라도 USER_ID가 다른 경우 존재 → 중복이 아님
→ UNION ALL 사용
정답 코드
SELECT
DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE >= '2022-03-01' AND SALES_DATE < '2022-04-01'
UNION ALL
SELECT
DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID,
NULL AS USER_ID, # 오프라인은 회원 정보가 없으므로 USER_ID는 NULL로 고정
SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE >= '2022-03-01' AND SALES_DATE < '2022-04-01'
ORDER BY
SALES_DATE,
PRODUCT_ID,
USER_ID'코딩 테스트 연습 > [프로그래머스][리트코드] MySQL' 카테고리의 다른 글
| [LV.5] GROUP BY > 입양 시각 구하기(2) ⭐️ (1) | 2025.07.18 |
|---|---|
| [LV.5] SELECT > 조건에 부합하는 중고거래 댓글 조회하기 (1) | 2025.07.16 |
| [LV.5] JOIN > 그룹별 조건에 맞는 식당 목록 출력하기 ⭐️ (4) | 2025.07.11 |
| [LV.5] GROUP BY > 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (2) | 2025.07.10 |
| [LV.5] GROUP BY > 저자 별 카테고리 별 매출액 집계하기 (3) | 2025.07.09 |