[달리기반] SQL 문법 연습 6

2025. 1. 24. 17:17·내일배움캠프/사전캠프 과제

Lv5. 가장 많이 팔린 품목은?

내가 틀린/놓친 부분은 민트색으로 표시!

 

1.
각 고객이 구매한 모든 제품의 총 금액을 계산하고, 고객 이름, 총 구매 금액, 주문 수를 출력하는 SQL 쿼리를 작성해주세요.

나의 답
select customerName,
sum(total) TotalAmount,
count(*) OrderCount
from
(select o.CustomerID,
p.Price,
o.Quantity,
p.Price*o.Quantity total
from Orders o inner join products p on o.ProductID=p.ProductID
) a join Customers c on a.CustomerID=c.CustomerID
group by 1
정답
SELECT
c.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.CustomerName;
오답 노트 오답은 아니지만.. JOIN으로 테이블 여러개를 연속적으로 연결할 수 있다!
서브쿼리 복잡하게 만드는 거 보다, 테이블에 포함된 컬럼이 중복이 없다면 join을 여러번 하는게 더 효율적인듯하다.
고민한 점 테이블 JOIN할 때 on 뒤에 컬럼 확인 잘 하기!!! 잘못 연결했다가 한시간 고민했다.

 

 

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

나의 답
select p1.Category,
p2.ProductName Top_Product,
a.total
from Products p1 join Products p2 on p1.ProductID=p2.ProductID
join
(
select ProductID,
sum(Quantity) Total
from Orders
group by 1) a on p2.ProductID=a.ProductID
WHERE a.Total = (
SELECT MAX(Total)
FROM (
SELECT SUM(o.Quantity) AS Total
FROM Orders o
JOIN Products p ON o.ProductID = p.ProductID
WHERE p.Category = p1.Category
GROUP BY p.ProductID
) AS b
)
정답
SELECT
p.Category,
p.ProductName AS Top_Product,
SUM(o.Quantity) AS TotalSold
FROM Products p
JOIN Orders o ON p.ProductID = o.ProductID
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.ProductID) AS Subquery
WHERE Subquery.Category = p.Category
);
오답 노트 정답은 어떠한 흐름으로 작성했을까 봐도봐도 모르겠다. 알게되면 오답노트 추가해야지...
고민한 점 카테고리별 상위 1개  구하는게 너무 어렵다.
서브쿼리에 같은 내용을 계속 적는게 맞는것인가...
①카테고리별, 제품별 판매량 조회하기 ②제품의 이름 연결하기 ③구해진 판매량과 MAX값 비교하여 필터링 하기... 이 순서대로 작성하니까 3번 작성하기가 너무 어렵다. 좀더 효과적인 접근 방법이 무엇일까

 

 

==> 다시 풀어보기!!! 뭔가 잘못됨

'내일배움캠프 > 사전캠프 과제' 카테고리의 다른 글

[걷기반] Java 알아보기  (1) 2025.02.12
[달리기반] SQL 문법 연습 7  (0) 2025.01.25
[달리기반] SQL 문법 연습 5  (0) 2025.01.24
[달리기반] SQL 문법 연습 4  (0) 2025.01.23
[달리기반] SQL 문법 연습 3  (0) 2025.01.23
'내일배움캠프/사전캠프 과제' 카테고리의 다른 글
  • [걷기반] Java 알아보기
  • [달리기반] SQL 문법 연습 7
  • [달리기반] SQL 문법 연습 5
  • [달리기반] SQL 문법 연습 4
aggeeeee
aggeeeee
  φ(..;) 🔜 \_へ(▭-▭)✨
  • aggeeeee
    🥔 님의 블로그
    aggeeeee
    • 분류 전체보기 (155)
      • Today I Learned (25)
      • 내일배움캠프 (115)
        • 본캠프 과제 (17)
        • 사전캠프 과제 (23)
        • SQL 코드카타 (44)
        • 알고리즘 코드카타 (31)
      • 💻🚀 (15)
        • Java (7)
        • Git & GitHub (1)
        • CS (4)
        • Spring & SpringBoot (3)
  • 링크

  • 최근 글

  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
aggeeeee
[달리기반] SQL 문법 연습 6
상단으로

티스토리툴바