백엔드 부트캠프[사전캠프]/문제풀이

[SQL 달리기반 레벨 5] 🏆 가장 많이 팔린 품목은?

sintory-04 2025. 2. 1. 16:52

    문제 : 🏆 가장 많이 팔린 품목은?

    1. 각 고객이 구매한 모든 제품의 총 금액을 계산하고, 고객 이름, 총 구매 금액, 주문 수를 출력하는 SQL 쿼리를 작성해주세요.
     
    CustomerName
    TotalAmount
    OrderCount
    Alice
    2800
    2
    Bob
    1150
    2
    Charlie
    800
    2

    > 답안에 오류가 있어 따로 수정.

    2. 각 제품 카테고리별로 가장 많이 팔린 제품의 이름과 총 판매량을 조회하는 SQL 쿼리를 작성해주세요.

    Category
    Top_Product
    TotalSold
    Electronics
    Laptop
    3
    Home
    Coffee Maker
    3

     


    1. 알고리즘

    1) 각 고객이 구매한 모든 제품의 총 금액을 계산하고, 고객 이름, 총 구매 금액, 주문 수를 출력

    - 1단계: 먼저 Orders 와 Product 테이블을 합친다. 여기서 필요한 부분은 주문 총 금액, Ordercont 얻는것.

    - 2단계: 그후 customer id 에 맞는 customername 구해주기

     2) 각 제품 카테고리별로 가장 많이 팔린 제품의 이름과 총 판매량을 조회하는 SQL 쿼리를 작성

    - 1단계: order 테이블에서 quantity 를 더해주고, 그걸 기준으로 RANK 만들기.

    - 2단계: rank  값이 1인 걸 가져오기, 그 외에 Name, Category 가져오기

    2. SQL 문 

    1번 문제

    - 1단계: 먼저 Orders 와 Product 테이블을 합친다. 여기서 필요한 부분은 주문 총 금액, Ordercont 얻는것.

    select CustomerID , Sum(p.Price*o.Quantity) TotalAmount, count(CustomerID) OrderCount
    from Orders o
    join Products p on p.ProductID = o.ProductID
    group by 1

    - 2단계: 그후 customer id 에 맞는 customername 구해주기

    with OrdersSum AS(
    select CustomerID , Sum(p.Price*o.Quantity) TotalAmount, count(CustomerID) OrderCount
    from Orders o
    join Products p on p.ProductID = o.ProductID
    group by 1)
    select c.CustomerName, o.TotalAmount, o.OrderCount
    from OrdersSum o
    join Customers c on o.CustomerID = c.CustomerID

    2번 문제

    - 1단계: order 테이블에서 quantity 를 더해주고, 그걸 기준으로 RANK 만들기.

    select ProductID, sum(Quantity) as TotalSold, rank() over(order by sum(Quantity) desc) as rnk
    from Orders 
    group by ProductID

    - 2단계: rank  값이 1인 걸 가져오기, 그 외에 Name, Category 가져오기

    with OrdersSum as (
    select ProductID, sum(Quantity) as TotalSold, rank() over(order by sum(Quantity) desc) as rnk
    from Orders 
    group by ProductID
    )
    select p.Category , p.ProductName , TotalSold
    from OrdersSum o
    join Products p on o.ProductID = p.ProductID
    where rnk =1