장래 프로그래머의 블로그
Lv4. 단골 고객님 찾기 본문
문제 :
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 쿼리를 작성해주세요.
- 출력 결과에는 고객 이름, 주문 건수, 총 주문 금액이 포함되어야 합니다. 단, 주문을 한 적이 없는 고객도 결과에 포함되어야 합니다.
- 기대결과
CustomerName OrderCount TotalSpent Alice2450Bob2280Charlie150David1400
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 1, 2 ) a ) b where ranking = 1 order by 1 desc | cs |
'[내일배움캠프]달리기반' 카테고리의 다른 글
Lv3. 이용자의 포인트 조회하기 (4) | 2024.09.27 |
---|---|
Lv2. 날짜별 획득포인트 조회하기 (0) | 2024.09.27 |
Lv1. 데이터 속 김서방 찾기 (2) | 2024.09.27 |