[Leetcode] Market Analysis I
정답
SELECT
UU.user_id buyer_id,
UU.join_date,
CASE
WHEN T.user_id IS NULL THEN 0
ELSE T.cnt
END as 'orders_in_2019'
FROM Users UU
LEFT JOIN (
SELECT
O.buyer_id user_id,
COUNT(*) cnt
FROM Users U
LEFT JOIN Orders O
ON U.user_id = O.buyer_id
WHERE YEAR(O.order_date) = '2019'
GROUP BY U.user_id
) T
ON UU.user_id = T.user_id
✅ Point
- WHERE 조건이 먼저 적용되면, 해당 조건을 만족하지 않는 사용자(user)는 아예 집계 대상에서 제외됨
- 따라서 전체 사용자 목록을 유지한 채로 2019년 주문 건수를 집계하기 위해, 조건이 적용된 주문 집계를 Subquery로 따로 분리하고
- 그 결과를 LEFT JOIN으로 원본 사용자 테이블과 결합한 후, 주문 내역이 없는 경우 NULL을 0으로 처리하여 표시함