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이든 처리 후, 한 번에 함수를 적용하는 것이 좋음
'TIL' 카테고리의 다른 글
[231226] SQLD: 기본개념 및 데이터 모델링 & SQL: 코드카타 75~76 (1) | 2023.12.26 |
---|---|
[231222] SQL: 코드카타 72~74 (0) | 2023.12.22 |
[231220] SQL: 코드카타 66~70 (1) | 2023.12.20 |
[231219] SQL: 코드카타 60~65 (0) | 2023.12.19 |
[231218] SQL: 코드카타 55~59 (1) | 2023.12.18 |