[금융권 SQL 실무] 4. Case When 절
CASE WHEN 이란?
SQL의 CASE WHEN 구문은 특정 조건에 따라 다른 결과를 출력하는 데 사용됩니다. 이를 통해 특정 데이터를 조건에 따라 다른 방식으로 처리할 수 있습니다.
CASE WHEN 구조
일반적으로 CASE WHEN 구문은 다음과 같은 형식을 가집니다.
SELECT
CASE
WHEN [조건1] THEN [결과1]
WHEN [조건2] THEN [결과2]
...
ELSE [기본 결과]
END
FROM [테이블 이름];
여기서 [조건1], [조건2] 등은 비교 연산자를 사용하여 특정 값과 비교합니다. 비교 연산자에는 다음과 같은 것들이 있습니다.
= (같음) <> (다름) < (작음) <= (작거나 같음) > (큼) >= (크거나 같음) |
[결과1], [결과2] 등은 조건에 해당할 때 출력되는 값입니다. 마지막으로 [기본 결과]는 모든 조건이 일치하지 않을 때 출력되는 값입니다.
다음은 간단한 예시입니다.
예를 들어, 다음과 같은 sales 테이블이 있다고 가정해 봅시다.
Customer_id | Product_id | Quantity |
1 | 100 | 2 |
2 | 200 | 1 |
3 | 100 | 3 |
4 | 200 | 2 |
이제, 해당 테이블에서 quantity가 2 이상인 경우 "많음", 1인 경우 "적음", 그 외의 경우에는 "보통"이라는 값을 출력하고 싶다고 가정해 봅시다. 이를 CASE WHEN 구문을 사용하여 다음과 같이 구현할 수 있습니다.
SELECT
CASE
WHEN quantity >= 2 THEN '많음'
WHEN quantity = 1 THEN '적음'
ELSE '보통'
END
FROM sales;
위의 쿼리를 실행하면 다음과 같은 결과가 나올 것입니다.
CASE WHEN 구문 결과 |
많음 적음 많음 많음 |
이와 같이, CASE WHEN 구문은 데이터의 조건에 따라 다른 값을 출력하고 처리할 수 있는 강력한 기능입니다.
CASE WHEN 활용
CASE WHEN 구문은 다양한 경우에 유용하게 사용될 수 있습니다. 일반적으로 다음과 같은 경우에 활용됩니다.
1. 데이터 변환
데이터베이스에서 저장된 데이터를 필요에 따라 변환해야 하는 경우에 사용됩니다. 예를 들어, 데이터베이스에는 날짜가 YYYY-MM-DD 형식으로 저장되어 있지만, 월별로 데이터를 요약해야 하는 경우 월별 요약 결과를 출력하기 위해 CASE WHEN 구문을 사용하여 월별 그룹화를 수행할 수 있습니다.
2. 조건부 계산
데이터베이스에서 계산된 값에 대해 조건에 따라 다른 계산을 수행해야 하는 경우에 사용됩니다. 예를 들어, 가격이나 할인율에 대한 정보를 가지고 있는 데이터베이스에서 할인된 가격을 계산해야 하는 경우, CASE WHEN 구문을 사용하여 할인율에 따라 계산식을 다르게 설정할 수 있습니다.
3. 데이터 필터링
특정 조건을 충족하는 데이터만 필터링해야 하는 경우에 사용됩니다. 예를 들어, 특정 상품의 판매량을 살펴보기 위해 상품 ID와 판매량 정보가 포함된 테이블이 있다면, 판매량이 일정 수준 이상인 상품만 필터링하기 위해 CASE WHEN 구문을 사용할 수 있습니다.
4. 데이터 분류
데이터를 일정한 기준에 따라 분류해야 하는 경우에 사용됩니다. 예를 들어, 나이에 따라 데이터를 분류하기 위해 CASE WHEN 구문을 사용할 수 있습니다.
이러한 방식으로 CASE WHEN 구문은 데이터베이스에서 다양한 용도로 활용될 수 있습니다. 주어진 데이터의 형태와 사용 목적에 따라 적절한 경우에 사용하면 데이터 처리 및 분석에 매우 유용합니다.
CASE WHEN 유사함수
CASE WHEN과 유사한 함수로는 다음과 같은 함수들이 있습니다.
1. COALESCE
COALESCE 함수는 인자로 전달된 값 중 NULL이 아닌 첫 번째 값을 반환합니다. 이를 사용하여 CASE WHEN과 유사한 결과를 얻을 수 있습니다. 예를 들어, 다음과 같은 쿼리를 생각해 봅시다.
SELECT COALESCE(column1, column2, '기본값') FROM table;
위의 쿼리는 column1, column2 중 NULL이 아닌 첫 번째 값을 출력하고, 둘 다 NULL인 경우 '기본값'을 출력합니다.
2. IFNULL/ISNULL
IFNULL 또는 ISNULL 함수는 인자로 전달된 값이 NULL인 경우 지정된 기본값을 반환합니다. 이를 사용하여 CASE WHEN과 유사한 결과를 얻을 수 있습니다. 예를 들어, 다음과 같은 쿼리를 생각해 봅시다.
SELECT IFNULL(column1, '기본값') FROM table;
위의 쿼리는 column1이 NULL인 경우 '기본값'을 출력합니다.
3. NULLIF
NULLIF 함수는 두 개의 인자를 받아서 두 값이 같으면 NULL을 반환하고, 다르면 첫 번째 값을 반환합니다. 이를 사용하여 CASE WHEN과 유사한 결과를 얻을 수 있습니다. 예를 들어, 다음과 같은 쿼리를 생각해 봅시다.
SELECT NULLIF(column1, 0) FROM table;
위의 쿼리는 column1이 0인 경우 NULL을 반환하고, 그 외의 경우에는 column1 값을 반환합니다.
4. DECODE
DECODE 함수는 Oracle 데이터베이스에서 사용되는 함수입니다. 이 함수는 CASE WHEN과 유사하게 조건에 따라 값을 반환합니다. 예를 들어, 다음과 같은 쿼리를 생각해 봅시다.
SELECT DECODE(column1, 1, '값1', 2, '값2', '기본값') FROM table;
위의 쿼리는 column1 값이 1이면 '값1', 2이면 '값2', 그 외의 값인 경우 '기본값'을 출력합니다.
이러한 함수들은 CASE WHEN과 비슷한 기능을 수행하지만, 각각의 함수는 사용하는 데이터베이스에 따라 다르며, 문법도 다를 수 있습니다. 따라서 사용하려는 데이터베이스에서 제공하는 함수를 사용하는 것이 좋습니다.
'데이터분석 > SQL' 카테고리의 다른 글
[금융권 SQL 실무] JOIN 함수 (22) | 2023.05.09 |
---|---|
[금융권 SQL 실무] 금융권 SQL 활용 (13) | 2023.05.08 |
[금융권 SQL 실무] WHERE 절 (9) | 2023.04.28 |
[금융권 SQL 실무] 서브쿼리(Subquery) (8) | 2023.04.26 |
[금융권 SQL 실무] with 절 (13) | 2023.04.25 |
댓글