Post

퀘스트 - 달리기반 Lv5. 가장 많이 팔린 품목은?

퀘스트 - 달리기반 Lv5. 가장 많이 팔린 품목은?

문제

  • Products 테이블:
ProductIDProductNameCategoryPrice
1LaptopElectronics1000
2SmartphoneElectronics800
3HeadphonesElectronics150
4Coffee MakerHome200
5BlenderHome100
  • Products 테이블:
OrderIDProductIDOrderDateQuantityCustomerID
10112024-02-0121
10232024-02-0212
10322024-02-0311
10442024-02-0433
10512024-02-0512
10652024-02-0623
  • Customers 테이블:
CustomerIDCustomerNameCountry
1AliceUSA
2BobUK
3CharlieUSA


  • 요구사항:
    • 고객 이름, 총 구매 금액, 고객이 실제 주문한 주문서(OrderID) 수를 출력하는 SQL 쿼리를 작성해주세요.
      • a. 기대 결과
      CustomerNameTotalAmountOrderCount
      Alice26002
      Bob9502
      Charlie8002
    • 각 제품 카테고리별로 가장 많이 팔린 제품의 이름과 총 판매량을 조회하는 SQL 쿼리를 작성해주세요.
      • a. 기대 결과
      CategoryTop_ProductTotalSold
      ElectronicsLaptop3
      HomeCoffee Maker3


제약사항:

  • 두 쿼리 모두 서브쿼리, JOIN, GROUP BY, HAVING 등의 SQL 기능을 사용해 문제를 풀어야 합니다.
  • 여러 테이블 간의 관계를 명확히 이해하고, 데이터를 효율적으로 결합하는 것이 중요해요!




문제 풀이

  • 문제1 - 고객 이름, 총 구매 금액, 고객이 실제 주문한 주문서(OrderID) 수를 출력하는 SQL 쿼리를 작성해주세요.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    SELECT
      c.CustomerName AS CustomerName,
      SUM(p.Price*o.Quantity) AS TotalAmount,
      COUNT(o.OrderID) AS OrderCount
    FROM
      Customers c JOIN Orders o ON c.CustomerID=o.CustomerID
                  JOIN Products p ON o.ProductID=p.productID
    GROUP BY
      c.CustomerID;
    
  • 3개 이상의 테이블에 JOIN을 사용해야 합니다


  • 문제2 - 각 제품 카테고리별로 가장 많이 팔린 제품의 이름과 총 판매량을 조회하는 SQL 쿼리를 작성해주세요.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    SELECT
      p.Category AS Category,
      p.ProductName AS Top_Product,
      SUM(o.Quantity) TotalSold
    FROM
      Products p JOIN Orders o ON p.ProductID=o.PrudoctID
    GROUP BY
      p.Category,
      p.ProductName
    HAVING
      SUM(o.Quantity) = (
          SELECT
              MAX(sumQuantity)
          FROM (
              SELECT
                  p2.Category,
                  SUM(o2.Quantity) AS sumQuantity
              FROM
                  Products p2 JOIN Orders o2 ON p2.ProductID=o2.ProductID
              GROUP BY
                  p2.Category,
                  p2.ProductName
          ) s
          WHERE
              s.Category=p.Category
      );
    
  • 각 카테고리마다의 합계를 조회한 뒤, 최댓값을 가진 데이터를 추출하고 HAVING절로 조건을 붙여 표시합니다

이 문제는 HAVING절을 배워왔던 저번 문제들 중에서 유사하게 나왔던 문제가 있었으므로
공부했던 내용을 기반으로 충분히 풀 수 있을만한 문제라고 생각됩니다

그리고 쿼리문 작성 방식을 이번 글의 답안처럼 작성하는게 눈에 더 잘 들어오는 것 같네요

This post is licensed under CC BY 4.0 by the author.