단일 vs 중첩 CASE WHEN 구문을 비교해 보면서 각각의 장단점에 대해 설명해 드리겠습니다.
우선 테스트용 데이터를 생성하기 위해 아래와 같은 테이블을 생성하고 데이터를 삽입해 보겠습니다.
CREATE TABLE sales (
id INT PRIMARY KEY,
country VARCHAR(50),
tiering VARCHAR(50)
);
INSERT INTO sales (id, country, tiering)
VALUES
(1, 'KR', 'Tier 1'),
(2, 'KR', 'Tier 2'),
(3, 'KR', 'Tier 3'),
(4, 'US', 'Tier 1'),
(5, 'US', 'Tier 2'),
(6, 'US', 'Tier 3'),
(7, 'JP', 'Tier 1'),
(8, 'JP', 'Tier 2'),
(9, 'JP', 'Tier 3');
country컬럼은 는 'KR', 'JP', 'US' 세 가지 값이 있고, tiering은 판매에 따른 등급을 나타내는 데이터입니다.
country와 tiering에 따라 rate이 다르게 설정되어야 한다면 우선 아래와 같은 단일 CASE WHEN문으로 작성 가능합니다.
select
id,
country,
tiering,
case
when country = 'KR' and tiering = 'Tier 1' then '1%'
when country = 'KR' and tiering = 'Tier 2' then '2%'
when country = 'KR' and tiering = 'Tier 3' then '3%'
when country = 'JP' and tiering = 'Tier 1' then '2%'
when country = 'JP' and tiering = 'Tier 2' then '3%'
when country = 'JP' and tiering = 'Tier 3' then '4%'
when country = 'US' and tiering = 'Tier 1' then '3%'
when country = 'US' and tiering = 'Tier 2' then '4%'
when country = 'US' and tiering = 'Tier 3' then '5%'
end as rate
from
sales;
이 쿼리는 sales 테이블에서 데이터를 가져와 각 행의 country와 tiering 값을 기반으로 rate 값을 계산합니다.
rate 값은 결과 데이터 세트에 새로운 열로 추가됩니다.
다음으로는 중첩된 CASE WHEN문을 사용한 쿼리와 그 결과를 살펴보겠습니다.
SELECT
id,
country,
tiering,
CASE
WHEN country = 'KR' THEN
CASE
WHEN tiering = 'Tier 1' THEN '1%'
WHEN tiering = 'Tier 2' THEN '2%'
WHEN tiering = 'Tier 3' THEN '3%'
END
WHEN country = 'JP' THEN
CASE
WHEN tiering = 'Tier 1' THEN '2%'
WHEN tiering = 'Tier 2' THEN '3%'
WHEN tiering = 'Tier 3' THEN '4%'
END
WHEN country = 'US' THEN
CASE
WHEN tiering = 'Tier 1' THEN '3%'
WHEN tiering = 'Tier 2' THEN '4%'
WHEN tiering = 'Tier 3' THEN '5%'
END
END AS rate
FROM
sales;
이 쿼리 역시 sales 테이블에서 데이터를 가져와 country와 tiering 값을 기반으로 rate 값을 계산합니다.
단일 CASE WHEN을 사용한 첫 번째 쿼리에서는
각 조건에 따른 결과가 바로 나열되어 있기 때문에, 조건과 그에 따른 결과를 한 번에 볼 수 있습니다.
이는 코드를 읽는 사람이 각 조건에 따른 동작을 바로 이해할 수 있도록 돕습니다.
반면에 중첩된 CASE WHEN문을 사용한 두 번째 쿼리는
코드의 줄 수를 줄였지만, 복잡한 로직을 필요로 합니다.
처음 코드를 보는 사람이 이 로직을 이해하는 데 시간이 더 걸릴 수 있지만,
같은 로직의 반복을 줄이므로 특정 상황에서는 더욱 유용할 수 있습니다.
따라서 상황에 맞게 적절한 구문을 선택해서 사용하는 것이 중요합니다.
'Skills > SQL' 카테고리의 다른 글
일별 MTD ADO 계산: SQL 쿼리로 일별 MTD 평균 주문량 분석하기 (0) | 2024.08.21 |
---|---|
[SQL]지난 30일간 일별 평균 주문건수 확인하기 (0) | 2023.04.05 |
[SQL] 다른 테이블의 데이터를 추가하는 방법 (0) | 2023.03.31 |
SQL WHERE IN을 활용한 다중 컬럼 필터링 (0) | 2023.03.29 |
이번 달과 지난 달에 속한 쿠폰 슬롯 수 분석하기 (0) | 2023.03.28 |