데이터를 가공하고 분석하기 위해 SQL에서 가상 테이블과 일시 테이블을 사용하는 것은 매우 유용합니다. 이러한 테이블을 사용하여 데이터를 임시로 저장하거나 다른 쿼리의 결과를 활용할 수 있습니다. 이번 문제에서는 가상 테이블과 일시 테이블을 활용하여 데이터를 가공하는 연습을 해보겠습니다.
문제 설명
다음과 같은 Orders
테이블을 가지고 있다고 가정해봅시다.
CREATE TABLE Orders (
OrderID int,
CustomerID int,
OrderDate date,
TotalAmount decimal(10, 2)
);
데이터베이스에는 해당 테이블을 통해 주문을 관리하고 있는데, 이 데이터를 활용하여 다음 2개의 문제를 해결해야 합니다.
문제 1: 각 고객별로 최근 3개월간의 주문 수와 총 주문 금액을 조회해보세요.
문제를 해결하기 위해 첫 번째로 가상 테이블을 사용하여 최근 3개월간의 주문 데이터를 추출해야 합니다. 아래 SQL 쿼리를 사용하여 가상 테이블을 생성하세요.
SELECT
CustomerID,
COUNT(*) as OrderCount,
SUM(TotalAmount) as TotalAmount
INTO #RecentOrders
FROM Orders
WHERE OrderDate >= DATEADD(month, -3, GETDATE())
GROUP BY CustomerID;
위 쿼리는 최근 3개월간의 주문 데이터를 임시로 저장할 #RecentOrders
가상 테이블을 생성합니다. 이 가상 테이블을 활용하여 최근 3개월간의 주문 수와 총 주문 금액을 확인할 수 있습니다.
다음 쿼리를 실행하여 문제를 해결하세요.
SELECT
c.CustomerID,
c.CustomerName,
r.OrderCount,
r.TotalAmount
FROM Customers c
INNER JOIN #RecentOrders r ON c.CustomerID = r.CustomerID;
문제 2: 일시 테이블을 활용하여 월별로 주문 수와 총 주문 금액을 조회해보세요.
두 번째 문제는 월별로 주문 수와 총 주문 금액을 조회하는 것입니다. 이를 위해 일시 테이블을 사용하여 데이터를 임시로 저장하고 사용해야 합니다. 아래 SQL 쿼리를 사용하여 일시 테이블을 생성하세요.
SELECT
MONTH(OrderDate) as OrderMonth,
COUNT(*) as OrderCount,
SUM(TotalAmount) as TotalAmount
INTO #MonthlyOrders
FROM Orders
GROUP BY MONTH(OrderDate)
ORDER BY OrderMonth;
위 쿼리는 월별 주문 데이터를 임시로 저장할 #MonthlyOrders
일시 테이블을 생성합니다. 이 일시 테이블을 활용하여 월별 주문 수와 총 주문 금액을 조회할 수 있습니다.
다음 쿼리를 실행하여 문제를 해결하세요.
SELECT
OrderMonth,
OrderCount,
TotalAmount
FROM #MonthlyOrders;
문제 해결 결과
위 문제를 해결한 결과는 다음과 같습니다.
문제 1: 각 고객별로 최근 3개월간의 주문 수와 총 주문 금액
CustomerID | CustomerName | OrderCount | TotalAmount |
---|---|---|---|
1 | John Smith | 5 | 1000.00 |
2 | Jane Doe | 2 | 500.00 |
3 | Bob Johnson | 3 | 750.00 |
문제 2: 월별 주문 수와 총 주문 금액
OrderMonth | OrderCount | TotalAmount |
---|---|---|
1 | 10 | 2000.00 |
2 | 8 | 1500.00 |
3 | 12 | 2500.00 |
4 | 6 | 1200.00 |
5 | 9 | 1800.00 |
6 | 7 | 1400.00 |
이렇게 가상 테이블과 일시 테이블을 활용하여 주어진 문제를 해결할 수 있습니다. 데이터를 가공하고 분석하는 과정에서 가상 테이블과 일시 테이블을 활용하면 원하는 결과를 보다 쉽게 얻을 수 있습니다. 이러한 기능을 효과적으로 활용하여 데이터 분석 작업을 진행하면 보다 정확하고 효율적인 결과를 얻을 수 있습니다.