
1. 고객별로 주문 건수와 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요.
- 출력 결과에는 고객 이름, 주문 건수, 총 주문 금액이 포함되어야 합니다. 단, 주문을 한 적이 없는 고객도 결과에 포함되어야 합니다.
내 답 :
# 1. 고객별로 그룹화 group by customerid
# 2. 주문건수 count(*)
# 3. 총 주문금액 sum(TotalAmount)
# 4 두 테이블 조
# 5. 주문한 적 없는 고객도 결과에 포함되어야
SELECT c.CustomerName,
COUNT(o.OrderID) OrderCount,
COALESCE(SUM(o.TotalAmount),0) TotalSpent
FROM Customers c LEFT JOIN ORDERS o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerName ;
정답 :
SELECT
c.CustomerName,
COUNT(o.OrderID) AS OrderCount,
COALESCE(SUM(o.TotalAmount), 0) AS TotalSpent
FROM
Customers c
LEFT JOIN
Orders o ON c.CustomerID = o.CustomerID
GROUP BY
c.CustomerName;
2. 나라별로 총 주문 금액이 가장 높은 고객의 이름과 그 고객의 총 주문 금액을 조회하는 SQL 쿼리를 작성해주세요.
- Country, CustomerName, TotalAmount
- 나라별 - Group by Country
- 총 주문 금액이 가장 높은 고객 이름 - Max(TotalAmount)
- 고객의 총 주문 금액 - SUM(TotalAmount), Group by CustomerName
내 답 :
# 나라별 그룹 group by country
# 총 주문 금액이 가장 높은 고객 이름 sum(totalamount) order by sum(totalamount) desc limit1 group by customername
# 그 고객의 총 주문 금액 sum(totalamount)
SELECT c.Country,
c.CustomerName Top_Customer,
SUM(o.TotalAmount) Top_Spent
FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY c.Country, c.CustomerName
HAVING SUM(o.TotalAmount)=
(
SELECT MAX(Sum_Spent)
FROM
(
SELECT SUM(o2.TotalAmount) Sum_Spent
FROM Customers c2 LEFT JOIN Orders o2 ON c2.CustomerID = o2.CustomerID
GROUP BY c2.CustomerID
) sub
) ;
정답 :
SELECT
c.Country,
c.CustomerName AS Top_Customer,
SUM(o.TotalAmount) AS Top_Spent
FROM
Customers c
JOIN
Orders o ON c.CustomerID = o.CustomerID
GROUP BY
c.Country, c.CustomerName
HAVING
SUM(o.TotalAmount) =
(
SELECT
MAX(SumSpent)
FROM
(SELECT
SUM(o2.TotalAmount) AS SumSpent
FROM
Customers c2
JOIN
Orders o2 ON c2.CustomerID = o2.CustomerID
WHERE
c2.Country = c.Country
GROUP BY
c2.CustomerID) AS Subquery
);
→ 제일 안 서브 쿼리 : 고객아이디로 그룹, 두 테이블 JOIN, 주문 금액 합
→ 그 다음 쿼리 : 주문 금액 합의 최댓값
→ 쿼리 : 두 테이블 JOIN,나라별로 그룹, 주문금액 합과 최댓값이 같다는 조건의 HAVING
GROUP BY # DISTINCT와 같이 중복 제거 해줌
HAVING # 그룹화된 데이터에 조건을 검
WHERE # 테이블 전체 행 하나하나에 조건을 검
'SQL > 문제' 카테고리의 다른 글
| SQL | 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2025.01.02 |
|---|---|
| SQL | 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2024.12.23 |
| SQL | 달리기반 Lv4. 가장 높은 월급을 받는 직원은? (1) | 2024.12.22 |
| SQL | 달리기반 Lv3. 이용자의 포인트 조회하기 (1) | 2024.12.22 |
| SQL | 달리기반 Lv2. 날짜별 획득포인트 조회하기 (0) | 2024.12.22 |