본문 바로가기

SQL/프로그래머스 SQL 고득점 kit

SQL 고득점 Kit / SELECT / 오프라인-온라인 판매 데이터 통합하기 / MySQL

728x90

📚문제

출처 : 프로그래머스(https://school.programmers.co.kr/learn/courses/30/lessons/131537)

 

📝풀이

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