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
'SQL > 프로그래머스 SQL 고득점 kit' 카테고리의 다른 글
SQL 고득점 Kit / GROUP BY / 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 / MySQL (0) | 2023.10.27 |
---|---|
SQL 고득점 kit / GROUP BY / 즐겨찾기가 가장 많은 식당 정보 출력하기 / MySQL (GROUP BY, 서브쿼리) (0) | 2023.10.26 |
SQL 고득점 Kit / SELECT / 재구매가 일어난 상품과 회원 리스트 구하기 / MySQL (0) | 2023.10.19 |
SQL 고득점 kit / SELECT / 서울에 위치한 식당 목록 출력하기(GROUP BY) (1) | 2023.10.10 |
SQL 고득점 kit / SELECT / 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2023.10.07 |