# 풀이
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;
- 해설
3월에 팔린 상품 내역을 추출하고, 오프라인에서 팔린 상품의 USER_ID는 NULL로 표시하게 하는 문제.
어렵거나 헷갈릴 것이 있는 문제는 아니었으므로, 한 줄 한 줄 해석하지는 않는다. 딱 봐도 2개의 테이블에서 추출한 데이터를 위아래로 합치면 될 것 같아 보인다.
중복도 포함해야 하니 UNION ALL을 사용하고, OFFLINE_SALE엔 없는 USER_ID는 NULL로 표시해 준다.
그 외에는 문제에서 제시한 대로 조건을 달아주면 된다.
* 주의점
처음에는 예시는 안 보고 문제만 보고 다음과 같이 쿼리문을 제출했는데 자꾸 오답이 나기에 이유를 알 수가 없었다.
SELECT 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 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;
몇 번이나 뜯어봐도 잘못 작성한 곳이 없어서 대체 뭐지 싶던 찰나, 예시를 봤고 이내 문제점을 알았다.
내가 작성한 쿼리문은 DATE_FORAT을 써 주지 않아 시분초 단위까지 전부 출력되는 쿼리인데, 예시에는 연월일만 나오게 되어 있었다.
설마 싶은 마음에 DATE_FORMAT을 추가했더니 바로 정답..
정답과 오답을 가를 정도라면 단순히 예시가 아니라 문제의 조건에 넣어놨어야 하는 것이 아닌가...? 싶다
'코딩테스트 > SQL - 프로그래머스' 카테고리의 다른 글
SQL 고득점 kit(SELECT) - 서울에 위치한 식당 목록 출력하기 (0) | 2023.12.15 |
---|---|
SQL 고득점 kit(SELECT) - 3월에 태어난 여성회원 목록 출력하기 (0) | 2023.12.12 |
SQL 고득점 kit(SELECT) - 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2023.12.12 |
SQL 고득점 kit(SELECT) - 평균 일일 대여 요금 구하기 (0) | 2023.12.12 |
SQL 고득점 kit(SELECT) - 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.12.06 |