SQL에서 데이터를 집계할 때 특정 조건에 따라 합계를 계산해야 하는 경우가 있습니다. 예를 들어, 특정 기준을 충족하는 데이터나 여러 조건을 기반으로 합계를 계산하려고 할 수 있습니다. CASE 문과 SUM 함수를 결합하여 유연한 집계를 할 수 있습니다. 이 기사는 구체적인 방법을 설명하고 조건부 합계를 계산하는 SQL 쿼리를 작성하는 방법을 가르쳐줍니다.
CASE 문과 SUM 함수의 기본 사용법
SQL CASE 문과 SUM 함수는 조건부 집계를 수행하는 데 강력한 도구입니다. 먼저 각 도구의 기본 사용법을 이해해 보겠습니다.
CASE 문의 기본 문법
CASE 문은 특정 조건에 따라 다른 값을 반환하는 데 사용됩니다. 기본 문법은 다음과 같습니다:
CASE
WHEN condition1 THEN value1
WHEN condition2 THEN value2
...
ELSE valueN
END
이 문법에서 condition1이 true이면 value1이 반환되고, condition2가 true이면 value2가 반환되며, 어떤 조건도 충족하지 않으면 valueN이 반환됩니다.
SUM 함수의 기본 문법
SUM 함수는 지정된 열의 합계를 계산하는 데 사용됩니다. 기본 문법은 다음과 같습니다:
SELECT SUM(column_name) FROM table_name;
이 문법에서, 테이블의 지정된 열의 모든 행의 합계를 계산합니다.
CASE 문과 SUM 함수의 결합
CASE 문과 SUM 함수를 결합하여 특정 조건을 충족하는 데이터의 합계를 계산할 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다:
SELECT SUM(CASE
WHEN condition THEN value
ELSE 0
END) AS conditional_total
FROM table_name;
이 쿼리에서 조건이 true이면 값이 합산되고, 조건이 false이면 0이 합산됩니다. 이렇게 해서 조건부 합계가 계산됩니다.
조건부 합계를 계산하는 SQL 쿼리 예제
CASE 문과 SUM 함수를 결합하여 조건부 합계를 계산하는 구체적인 SQL 쿼리 예제를 살펴보겠습니다.
예제 1: 특정 조건을 충족하는 데이터의 합계 계산
예를 들어, 판매 데이터 테이블이 있고 특정 제품 카테고리의 총 판매액을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
SUM(CASE
WHEN category = 'Electronics' THEN sales_amount
ELSE 0
END) AS electronics_sales_total
FROM sales;
이 쿼리에서 category
가 ‘Electronics’인 경우 sales_amount
가 합산되고, 그렇지 않으면 0이 합산됩니다. 그 결과, ‘Electronics’ 카테고리의 총 판매액이 계산됩니다.
예제 2: 여러 조건을 기반으로 합계 계산
다음으로, 여러 조건을 기반으로 다른 합계를 계산하는 예제를 살펴보겠습니다. 예를 들어, 판매 데이터에서 전자 제품과 의류의 총 판매액을 모두 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
SUM(CASE
WHEN category = 'Electronics' THEN sales_amount
ELSE 0
END) AS electronics_sales_total,
SUM(CASE
WHEN category = 'Clothing' THEN sales_amount
ELSE 0
END) AS clothing_sales_total
FROM sales;
이 쿼리에서 sales_amount
는 category
가 ‘Electronics’ 또는 ‘Clothing’인 경우 합산되어 두 개의 다른 판매 합계가 계산됩니다.
예제 3: 조건에 따른 계산 포함하기
조건에 따라 다른 계산을 수행하는 예제도 살펴보겠습니다. 예를 들어, 할인 적용 여부에 따라 총 판매액을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
SUM(CASE
WHEN discount_applied = 'Yes' THEN sales_amount * 0.9
ELSE sales_amount
END) AS total_sales_with_discount
FROM sales;
이 쿼리에서 discount_applied
가 ‘Yes’인 경우, sales_amount
에 0.9를 곱한 값이 합산되고, 할인되지 않은 경우 원래의 sales_amount
가 합산됩니다. 이 방식으로 할인을 고려한 총 판매액이 계산됩니다.
여러 조건을 사용한 합계 계산 방법
구체적인 예제를 통해 여러 조건을 사용하여 합계를 계산하는 방법을 설명하겠습니다. 이는 더 복잡한 집계를 가능하게 합니다.
예제 1: 여러 조건을 결합한 합계 계산
예를 들어, 특정 지역과 기간의 총 판매액을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
SUM(CASE
WHEN region = 'North' AND sale_date BETWEEN '2023-01-01' AND '2023-12-31' THEN sales_amount
ELSE 0
END) AS north_region_sales_2023
FROM sales;
이 쿼리에서 region
이 ‘North’이고 sale_date
가 2023년 내에 있는 경우 sales_amount
가 합산되고, 그렇지 않으면 0이 합산됩니다.
예제 2: 다른 조건에 대한 다른 합계 계산
다음으로, 다른 조건에 대한 다른 합계를 계산하는 예제를 살펴보겠습니다. 예를 들어, 특정 프로모션이 적용된 경우와 그렇지 않은 경우의 총 판매액을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
SUM(CASE
WHEN promotion_applied = 'Yes' THEN sales_amount
ELSE 0
END) AS sales_with_promotion,
SUM(CASE
WHEN promotion_applied = 'No' THEN sales_amount
ELSE 0
END) AS sales_without_promotion
FROM sales;
이 쿼리에서 sales_amount
는 promotion_applied
가 ‘Yes’ 또는 ‘No’인 경우 합산되어 두 개의 다른 판매 합계가 계산됩니다.
예제 3: 중첩 조건을 사용한 합계 계산
또한, 중첩 조건을 사용하여 합계를 계산하는 예제를 살펴보겠습니다. 예를 들어, 제품 유형과 판매액에 따라 다른 할인율을 적용하여 합계를 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
SUM(CASE
WHEN category = 'Electronics' THEN
CASE
WHEN sales_amount > 1000 THEN sales_amount * 0.9
ELSE sales_amount * 0.95
END
WHEN category = 'Clothing' THEN
CASE
WHEN sales_amount > 500 THEN sales_amount * 0.85
ELSE sales_amount * 0.90
END
ELSE sales_amount
END) AS total_sales_with_discounts
FROM sales;
이 쿼리에서 category
가 ‘Electronics’인 경우, 판매액에 따라 다른 할인율이 적용되고, category
가 ‘Clothing’인 경우에도 마찬가지로 다른 할인율이 적용됩니다. 조건이 충족되지 않으면 원래 판매액이 합산됩니다. 이렇게 해서 복잡한 조건을 고려한 총 합계가 계산됩니다.
실용적인 적용 예제
실제 비즈니스 시나리오에서 실용적인 CASE 문과 SUM 함수의 사용법을 소개하는 예제를 보여드리겠습니다. 이는 일상적인 데이터 집계 작업에 유용한 특정 방법을 이해하는 데 도움이 됩니다.
예제 1: 월별 판매 합계 계산
회사의 판매 데이터를 월별로 집계하고 월별 판매 합계를 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
MONTH(sale_date) AS sale_month,
SUM(sales_amount) AS monthly_sales
FROM sales
GROUP BY MONTH(sale_date)
ORDER BY sale_month;
이 쿼리에서, sale_date
에서 월을 추출하고 각 월의 판매 금액을 합산합니다. 결과는 월별 판매 합계로 표시됩니다.
예제 2: 부서별 판매 및 달성률 계산
회사의 각 부서별로 판매 및 달성률을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
department,
SUM(sales_amount) AS total_sales,
SUM(sales_amount) / SUM(sales_target) * 100 AS achievement_rate
FROM sales
GROUP BY department;
이 쿼리에서 각 부서의 총 판매액과 판매 목표를 계산하고, 달성률(총 판매액 대비 판매 목표의 비율)을 결정합니다.
예제 3: 고객별 총 구매 금액 및 할인된 금액 계산
고객별로 총 구매 금액 및 총 할인된 구매 금액을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
customer_id,
SUM(sales_amount) AS total_purchase,
SUM(CASE
WHEN discount_applied = 'Yes' THEN sales_amount
ELSE 0
END) AS discounted_purchase
FROM sales
GROUP BY customer_id;
이 쿼리에서 각 고객의 총 구매 금액과 총 할인된 구매 금액을 계산합니다. 이를 통해 각 고객의 구매 행동에 대한 자세한 분석이 가능합니다.
예제 4: 제품의 총 재고 상태 및 판매 금액 계산
재고 데이터와 판매 데이터를 결합하여 제품의 재고 상태 및 총 판매 금액을 계산하려면 다음 쿼리를 사용할 수 있습니다:
SELECT
p.product_id,
p.product_name,
p.stock_quantity,
SUM(s.sales_amount) AS total_sold
FROM products p
LEFT JOIN sales s ON p.product_id = s.product_id
GROUP BY p.product_id, p.product_name, p.stock_quantity;
이 쿼리에서 products
테이블은 sales
테이블과 조인되어 각 제품의 재고 수량과 총 판매 금액을 계산합니다. 이렇게 해서 재고 관리와 판매 실적을 동시에 파악할 수 있습니다.
이와 같은 실용적인 적용 예제를 이해함으로써 CASE 문과 SUM 함수의 실용적인 사용법을 익히고 실제 비즈니스 시나리오에 적용하여 유용한 기술을 습득할 수 있습니다.
결론
SQL CASE 문과 SUM 함수를 결합하여 조건부 합계를 유연하게 계산하는 방법을 설명했습니다. 기본 사용법부터 구체적인 쿼리 예제, 여러 조건을 사용한 합계 계산 방법, 실용적인 적용 예제에 이르기까지 다양한 내용을 다루었습니다.
CASE 문을 사용하면 특정 조건에 따라 동적으로 값을 반환하고 SUM 함수로 결과를 합산할 수 있습니다. 이를 통해 복잡한 데이터 집계와 분석이 용이해집니다.
실제 비즈니스 시나리오에서 이러한 기술을 월별 판매 합계 계산, 부서별 판매 및 달성률, 고객별 총 구매 금액 및 할인된 금액, 제품의 재고 상태 및 총 판매 금액 계산 등 다양한 상황에 적용할 수 있습니다.
SQL을 사용하여 효율적인 데이터 분석을 수행하고 운영을 간소화하며 의사 결정을 빠르게 할 수 있습니다. 조건부 합계를 계산하는 기술을 익힘으로써 데이터베이스 집계 작업이 더욱 강력하고 편리해집니다.