반응형
📖 문제
Customers, Orders 두 테이블이 있습니다.
각 고객은 여러 주문을 할 수 있으며, 각 주문은 특정 고객에 속합니다.
2024년에 주문한 고객 중에서,
총 주문 금액이 500 이상인 고객의 이름과 총 주문 금액을 구하는 SQL문을 작성하세요.
📦 예제 테이블 정보
-- 예제 테이블 생성
CREATE TABLE Customers (
CustomerID INT PRIMARY KEY,
CustomerName NVARCHAR(100)
);
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID),
OrderAmount DECIMAL(10, 2),
OrderDate DATE
);
-- Customers 테이블 데이터
INSERT INTO Customers (CustomerID, CustomerName)
VALUES
(1, N'홍길동'),
(2, N'김민수'),
(3, N'이영희'),
(4, N'박철수');
-- Orders 테이블 데이터
INSERT INTO Orders (OrderID, CustomerID, OrderAmount, OrderDate)
VALUES
(101, 1, 200.00, '2024-01-10'),
(102, 1, 150.50, '2024-03-15'),
(103, 1, 270.00, '2024-06-20'),
(104, 2, 500.00, '2024-02-25'),
(105, 2, 390.00, '2024-04-18'),
(106, 3, 250.00, '2024-05-22'),
(107, 3, 150.00, '2024-09-30'),
(108, 4, 300.00, '2023-08-14'),
(109, 4, 400.00, '2023-11-19');
📌 예제 정답
SELECT
b.CustomerName AS N'고객 이름',
SUM(a.OrderAmount) AS N'총 주문 금액'
FROM Orders AS a
INNER JOIN Customers AS b ON a.CustomerID = b.CustomerID
WHERE YEAR(a.OrderDate) = 2024
GROUP BY b.CustomerName
HAVING SUM(a.OrderAmount) >= 500;
💬 해설
- INNER JOIN으로 고객과 주문 데이터를 연결합니다.
- WHERE YEAR(OrderDate) = 2024 조건을 통해 2024년 주문만 필터링합니다.
- GROUP BY CustomerName으로 고객별로 그룹화하고,
- HAVING SUM(OrderAmount) >= 500을 통해 500 이상 주문한 고객만 추출합니다.
💡 학습 포인트
- YEAR(날짜컬럼)을 사용한 연도 필터링
- INNER JOIN으로 테이블 간 관계 매핑
- GROUP BY + HAVING 구문을 통한 집계 조건 처리
📌 정리하자면, 이 문제는 지정된 연도 기준으로 데이터를 필터링하고,
그 결과에 대해 집계 함수와 조건을 결합하는 SQL 작성법을 익히는 실습이었습니다.
다중 조건이 포함된 실전형 쿼리 연습으로, 고객 분석, 매출 집계 등에서 자주 사용됩니다.
'SQL Server > 연습문제' 카테고리의 다른 글
SQL Server 서브쿼리 & 조건 실습 모음 (0) | 2025.06.11 |
---|---|
SQL Server JOIN 실습 - 구매회원, 구매기록 조회하기 (0) | 2025.06.11 |
SQL Server 기초 실습 - 테이블 생성부터 데이터 삽입까지 (2) | 2025.06.11 |
SQL Server 연습문제 - JOIN, 서브쿼리, NOT EXISTS 실습 (0) | 2025.06.04 |
SQL Server 연습문제 - 테이블 생성, 데이터 삽입/수정/삭제 실습 (0) | 2025.06.02 |
SQL Server 연습문제 - 연도 및 섹터별 symbol 수 집계 및 조건 필터링 (0) | 2025.05.30 |