본문 바로가기

TIL

[231221] SQL: 코드카타 71

1) 어떤 문제가 있었나

① 오프라인/온라인 판매 데이터 통합하기

UNION ALL을 활용해 보았으나 정답 오류로 체크됨 

SELECT *

FROM (SELECT SUBSTRING(sales_date,1,10) sales_date, product_id, user_id, sales_amount

            FROM ONLINE_SALE

            WHERE SUBSTRING(sales_date,1,7) = '2022-03'

            UNION ALL

            SELECT SUBSTRING(sales_date,1,10) sales_date, product_id, null user_id, sales_amount

            FROM ONLINE_SALE

            WHERE SUBSTRING(sales_date,1,7) = '2022-03')

ORDER BY 1, 2, 3

 

2) 내가 시도해본 건 무엇인가

다른 정답과 비교해서 날짜 조건 값을 여러 방식으로 변경해봄(substring, between,  date_format 등)

 + 애칭(alias)에 문제가 있는듯 하여, 추출 칼럼명을 대/소문자로 다 넣어봄 

 

3) 어떻게 해결했나

UNION ALL로 합친 테이블을 FROM 절 서브쿼리로 넣었는데, 서브쿼리에 애칭을 안 넣어서 오류 처리된 것을 알고 추가함 

+ 통합한 테이블 내 적용 조건이 동일하여, WHERE절과 데이터포맷 함수는 한 번만 적어 쿼리를 간소화 시킴

 

SELECT date_format(date(sales_date),'%Y-%m-%d'), product_id, user_id, sales_amount

from (SELECT sales_date, product_id, user_id, sales_amount

         FROM ONLINE_SALE

          union all

         SELECT sales_date, product_id, null as user_id, sales_amount

         FROM OFFLINE_SALE ) a

where date_format(date(sales_date),'%Y-%m') = '2022-03'

order by 1, 2, 3

 

4) 무엇을 새롭게 알았나

- FROM절에 서브쿼리를 넣으면 반드시 애칭을 포함해야 함 

- 복수 테이블 내 적용 조건이 동일하다면 join이든 union이든 처리 후, 한 번에 함수를 적용하는 것이 좋음