장래 프로그래머의 블로그

Lv4. 단골 고객님 찾기 본문

[내일배움캠프]달리기반

Lv4. 단골 고객님 찾기

wriml92 2024. 9. 27. 16:43

문제 :

Orders3 테이블:

OrderID CustomerID OrderDate TotalAmount
101 1 2024-01-01 150
102 2 2024-01-03 200
103 1 2024-01-04 300
104 3 2024-01-04 50
105 2 2024-01-05 80
106 4 2024-01-06 400

 

Customers 테이블:

CustomerID CustomerName Country
1 Alice USA
2 Bob UK
3 Charlie USA
4 David Canada

 

요구사항:
1. 고객별로 주문 건수와 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요.

  1. 출력 결과에는 고객 이름, 주문 건수, 총 주문 금액이 포함되어야 합니다. 단, 주문을 한 적이 없는 고객도 결과에 포함되어야 합니다.
  2. 기대결과
    CustomerName OrderCount TotalSpent
    Alice
    2
    450
    Bob
    2
    280
    Charlie
    1
    50
    David
    1
    400

2. 나라별로 총 주문 금액이 가장 높은 고객의 이름과 그 고객의 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요. 대결과

Country Top_Customer Top_Spent
USA Alice 450
UK Bob 280
Canada David 400

 

제약사항 :

● 두 쿼리 모두 서브쿼리, JOIN, GROUP BY, HAVING 등을 사용해 풀 수 있어야 한다.

● 주문을 한 적이 없는 고객도 첫 번째 쿼리 결과에 포함되어야 한다.


1번 정답 코드문

1
2
3
4
5
select c.CustomerName,
    count(1) OrderCount,
    sum(o.TotalAmount) TotalSpent
from customer c left join orders3 o on c.CustomerID=o.CustomerID
group by 1
cs

 

2번 정답 코드문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
select Country, Top_Customer, Top_spent
from
(
select Country, CustomerName Top_Customer, Top_spent,
    rank() over (partition by Country order by Top_spent desc) ranking
from
(
select Country, CustomerName, sum(TotalAmount) Top_spent
from
(
select c.Country, c.CustomerName, o.TotalAmount
from orders3 o join customer c on o.CustomerID = c.CustomerID
) p
group by 12
) a
) b
where ranking = 1
order by 1 desc
cs