출처
문제
각 사용자, 가입 날짜 및 2019년 구매자로서 한 주문 수를 찾을 수 있는 솔루션을 작성하십시오.
순서에 관계없이 결과 테이블을 반환합니다.
문제에 대한 해석
![]() |
![]() |
![]() |
가입한 모든 유저의 가입날짜와 2019년 구매건수에 대해 출력
풀이(MYSQL)
오답
select o.buyer_id, u.join_date, count(o.order_id) as 'orders_in_2019 '
from Users u join Orders o
on u.user_id = o.buyer_id
where year(o.order_date) = 2019
group by o.buyer_id, u.join_date
where절로 필터링 하면 2019년에 구매 경험이 없는 사람들의 id는 출력되지 않는다
정답
-- 방법1
select u.user_id as 'buyer_id', u.join_date,
sum(case when year(o.order_date) = 2019 then 1 else 0 end) as 'orders_in_2019'
from Users u left join Orders o
on u.user_id = o.buyer_id
group by 1,2
order by 1
모든 고객의 id를 조회하기 위해 Users테이블에 left조인을 하고
주문날짜의 연도가 2019년이면 1로하여 주문건수를 합산한다
-- 방법2
SELECT u.user_id as buyer_id, u.join_date , count(o.order_id) as 'orders_in_2019'
FROM users u
LEFT JOIN Orders o
ON o.buyer_id=u.user_id AND YEAR(order_date)='2019'
GROUP BY u.user_id
users테이블을 기준으로 left조인한 것까지는 동일하나
조인 조건에 orders에 있는 order_date의 연도가 2019년인 테이터만 조인하였다
아래와 같이 2019년 주문이 없을 경우null로 나온다
![](https://blog.kakaocdn.net/dn/AEsvT/btsIUyeagQB/irikmTK1YcTU21SpU6A3j1/img.png)
'문제풀이 > SQL(My sql)' 카테고리의 다른 글
[문제풀이] Leet code - Sales Person (0) | 2024.08.07 |
---|---|
[문제풀이] Leet code - Delete Duplicate Emails (0) | 2024.08.06 |
[문제풀이] Leet code - Sales Analysis III (0) | 2024.08.01 |
[문제풀이] Leet code - Product Sales Analysis III (0) | 2024.08.01 |
[문제풀이] Leet code - Customers Who Bought All Products (0) | 2024.07.31 |