문제
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 값으로 취할 수 있다.