본문 바로가기
카테고리 없음

[LeetCode] - 1158. Market Analysis 1

by 소복소복뚜벅뚜벅 2024. 4. 15.

문제 

Write a solution to find for each user, the join date and the number of orders they made as a buyer in 2019.
Return the result table in any order.

 

" 2019년 구매자로서 사용자별로 가입일, 주문한 수량을 작성하시오.: 

 

문제 풀이 

SELECT u.user_id AS buyer_id 
    ,  u.join_date 
    ,  IFNULL(COUNT(o.order_date),0) AS orders_in_2019
FROM Users AS u 
LEFT JOIN Orders AS o ON o.buyer_id = u.user_id 
AND YEAR(order_date) = '2019'

 

주의해야 할점 

 

1) WHERE 절을 이용하여 조건을 걸기 => WHERE order_date BETWEEN '2019-01-01' AND '2019-12-31' 

 

이 경우에는 Users 와 Orders 테이블을 조인한 후 WHERE 절을 이용하여 해당 날짜의 행을 추출하는 것이므로, user_id를 group by 했을 때, COUNT가 NULL 값이 나올 수 없어 0으로 취할 수 없다. 

 

2) LEFT JOIN을 할 때, 조건을 걸기 

 

이 경우에는 처음부터 Users와 Orders 테이블을 조인할 때 2019년인 경우에만 조인이 되므로, 2019년이 아닌 행의 경우 NULL 값을 가진다. 따라서 O 값으로 취할 수 있다.