SQL/프로그래머스 SQL 고득점 kit
SQL 고득점 Kit / SELECT / 오프라인-온라인 판매 데이터 통합하기 / MySQL
박혀노
2023. 10. 20. 11:05
728x90
📚문제
📝풀이
SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
FROM ONLINE_SALE
WHERE SALES_DATE BETWEEN '2022-03-01' AND '2022-03-31'
UNION ALL
SELECT DATE_FORMAT(SALES_DATE,"%Y-%m-%d") SALES_DATE,
PRODUCT_ID,
NULL AS USER_ID,
SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE BETWEEN '2022-03-01' AND '2022-03-31'
ORDER BY SALES_DATE , PRODUCT_ID , USER_ID
JOIN으로는 아무리 해봐도 도저히 답이 안나와서
UNION까진 생각이 났다
근데 오프라인 테이블의 USER_ID컬럼이 없는데 어떻게 해야하지? 라고 생각하다가
이 얘기가 그냥 NULL('NULL'이 아닌 빈 칸 ) AS USER_ID를 해주면 되는거였다
이 문제에선 ONLINE_TABLE과 OFFLINE_TABLE에 중복이 없어서
UNION / 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 BETWEEN '2022-03-01' AND '2022-03-31'
UNION
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 BETWEEN '2022-03-01' AND '2022-03-31'
ORDER BY SALES_DATE,PRODUCT_ID,USER_ID
이번에 풀 때도
NULL부분에서 조금 헷갈렸지만
해당날짜('2022-03-01' - '2022-03-31')에 판매된
ONLINE 데이터와 OFFLINE 데이터를
UNION 해서 잘 풀어줬다
이 문제에서 중요한 부분은
이 조건인것같다
어떤 날짜에 상품ID에 대해서 여러 판매 데이터가 존재한다면
UNION해준 다음에
GROUP BY 해주어서 총 판매량을 카운트해야겠지만
날짜,상품ID,유저ID에 대해 고유한 판매 기록을 가지기 때문에
단순히 UNION만 해주어도 된다
728x90