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

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

    '백엔드 부트캠프[사전캠프] > 문제풀이' 카테고리의 다른 글

    [SQL 달리기반 레벨 5] 🦚 예산이 가장 큰 프로젝트는?  (2) 2025.02.02
    [SQL 달리기반 레벨 1] 🎨 데이터 속 김서방 찾기  (0) 2025.02.01
    [SQL 달리기반 레벨 4] 💸 가장 높은 월급을 받는 직원은?  (0) 2025.02.01
    [SQL 달리기반 레벨 4] 🛒 단골 고객님 찾기  (1) 2025.01.31
    [SQL 달리기반 레벨 3] 💳 이용자의 포인트 조회하기  (0) 2025.01.31
    '백엔드 부트캠프[사전캠프]/문제풀이' 카테고리의 다른 글
    • [SQL 달리기반 레벨 5] 🦚 예산이 가장 큰 프로젝트는?
    • [SQL 달리기반 레벨 1] 🎨 데이터 속 김서방 찾기
    • [SQL 달리기반 레벨 4] 💸 가장 높은 월급을 받는 직원은?
    • [SQL 달리기반 레벨 4] 🛒 단골 고객님 찾기
    sintory-04
    sintory-04
    🚀🚀🚀
    • sintory-04
      Sintory Dev Blog
      sintory-04
      글쓰기 관리
    • 전체
      오늘
      어제
      • 분류 전체보기 (289)
        • 백엔드 부트캠프 (111)
          • TIL (97)
          • WIL (0)
          • 문제풀이 (7)
          • 기타 (6)
        • 백엔드 부트캠프[사전캠프] (35)
          • TIL (16)
          • 문제풀이 (17)
          • 기타 (1)
        • Troubleshooting (11)
        • 코딩 공부 (118)
          • Java (28)
          • Baekjoon-Java (24)
          • Programmers-Java (40)
          • Spirngboot (11)
          • typescript (1)
          • JavaScript (6)
          • Spring 입문 (8)
        • 프로젝트 (8)
          • ToDoApp(FireBase) (3)
          • ToDoApp(Spring) (5)
        • 기타 (4)
    • 블로그 메뉴

      • 소개
      • Github
    • 최근 글

    • 최근 댓글

    • hELLO· Designed By정상우.v4.10.3
    sintory-04
    [SQL 달리기반 레벨 5] 🏆 가장 많이 팔린 품목은?
    상단으로

    티스토리툴바