문제
https://school.programmers.co.kr/learn/courses/30/lessons/131537
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
✍️ 문제 요약
- ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품
- 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력
- OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL로 표시
- 판매일 오름차순, 상품ID 오름차순, 유저ID 오름차순 정렬
✍️ 내가 작성한 코드
- 구글링해서 결국 풀어냄!!!
SELECT DATE_FORMAT(a.sales_date, '%Y-%m-%d') as sales_date,
a.product_id,
NULLIF(user_id, '') as user_id,
a.sales_amount
FROM
(SELECT sales_date,
product_id,
user_id,
sales_amount
FROM online_sale AS o
UNION ALL
SELECT sales_date,
product_id,
NULL,
sales_amount
FROM offline_sale AS f
) a
WHERE a.sales_date like '2022-03%'
ORDER BY sales_date ASC, product_id ASC, user_id ASC;
🔍 코드 설명
1. 두 테이블을 위아래로 합치기(UNION)
- 두 테이블의 컬럼 수가 다르므로, NULL로 없는 컬럼 대체!
(
SELECT sales_date,
product_id,
user_id,
sales_amount
FROM online_sale
UNION
SELECT sales_date,
product_id,
NULL, -- 🚨 존재하지 않는 컬럼을 NULL(컬럼)으로 대체
sales_amount
FROM offline_sale
) a
2. 조건절 : 각각 2022년 03월 데이터 불러오기
(...) a
WHERE a.sales_date like '2022-03%'
3. SELECT 절에서 불러오려는 컬럼 명시
- offline_sale 테이블의 user_id 컬럼 내용이 비어있으므로, NULL 값 채워넣기
SELECT DATE_FORMAT(a.sales_date, '%Y-%m-%d') as sales_date,
a.product_id,
NULLIF(user_id, '') as user_id, -- 🚨 user_id가 ''(빈칸)이면 NULL 할당
a.sales_amount
FROM
(...) a
WHERE a.sales_date like '2022-03%'
4. 판매일 오름차순, 상품ID 오름차순, 유저ID 오름차순 정렬
ORDER BY sales_date ASC, product_id ASC, user_id ASC;
💡 새롭게 알게된 내용
1) UNION을 사용할 때, 각각의 컬럼 수가 다를 경우 합치는 방법 : NULL로 컬럼 대체
SELECT ...,
user_id,
...
FROM online_sale
UNION
SELECT ...,
NULL, -- 📌 동일한 위치에 NULL 입력 ➡️ ''(빈칸)으로 결합됨!!
...
FROM offline_sale

2) NULLIF(컬럼A, 'B') : 만약 컬럼A에서 내용이 'B'이면, NULL 할당
-- 📌 ''(공백)이면, NULL 할당
NULLIF(user_id, '') as user_id
🎯 혹시 다른 풀이도 있나?
SELECTFROM
끝.
'SQL' 카테고리의 다른 글
| [SQL/코드카타] 프로그래머스 - 취소되지 않은 진료 예약 조회하기 (0) | 2025.09.23 |
|---|---|
| [SQL/코드카타] 프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기 (4) | 2025.09.19 |
| [SQL/코드카타] 프로그래머스 : 대여 횟수가 많은 자동차들의 월별 대여 횟수 (0) | 2025.09.18 |