ThinkCatLog

[SQL] CASE와 IF() 본문

데이터 분석/SQL

[SQL] CASE와 IF()

생각냥 2024. 1. 24. 12:46

목차

CASE
IF()

CASE와 IF()는 조건에 따라 데이터를 처리해야 하는 상황에서 주로 사용된다.

CASE

CASE문은 주로 새로운 컬럼을 생성할 때 사용되거나 GROUP BY와 함께 사용된다.

새로운 컬럼 생성

SELECT 
    CASE
        WHEN 조건1 THEN 값1
        WHEN 조건2 THEN 값2
        ELSE 값3
    END AS case1
FROM table_name

GROUP BY와 함께 사용

SELECT SUM(column1)
FROM table_name
GROUP BY (
    CASE
    	WHEN 조건1 THEN 값1
    	WHEN 조건2 THEN 값2
    	ELSE 값3
    END AS case1
)

예시

아래 테이블은 product_info 테이블이다.

product_info 테이블

아래 쿼리는 product_info 테이블에서 Price가 500이하인 제품과 초과인 제품으로 분류하는 컬럼을 만드는 쿼리이다.

Price를 기준으로 나누는 쿼리

주의할 점

CASE는 위에서부터 조건을 확인한 후 값을 부여한다. 조건의 순서를 고려하여 CASE문을 사용하면 더 간결하게 쿼리를 작성할 수 있다. 만약 price를 기준으로 500미만, 500이상 1000미만, 100이상 제품으로 나눌 경우에 다음과 같이 쿼리를 작성하면 된다.

SELECT
    CASE
    	WHEN Price < 500 THEN '500미만'
    	WHEN Price >= 500 AND Price < 1000 THEN '500이상 1000미만'
    	ELSE '1000이상'
    END AS '가격 카테고리'
FROM product_info

CASE가 조건을 처리하는 방법을 이용하면 더 간결하게 작성할 수 있다. 두번째 조건의 Price >= 500 을 생략해도 괜찮다. 이미, 500 미만의 제품들은 첫번째 조건에서 걸러졌기 때문에 두번째 조건에 영향을 받는 제품은 모두 500 이상인 제품이다. 다음과 같이 쿼리를 작성할 수 있다.

SELECT
    CASE
    	WHEN Price < 500 THEN '500미만'
    	WHEN Price < 1000 THEN '500이상 1000미만'
    	ELSE '1000이상'
    END AS '가격 카테고리'
FROM product_info

IF()

IF()도 CASE처럼 조건에 따라 새로운 컬럼을 만들 때 사용되거나 GROUP BY와 함께 사용된다. 여기서 IF()는 함수를 의미한다. IF statement와는 다른 개념이다. 뒤에 붙은 괄호로 두 IF를 구분할 수 있다.

새로운 컬럼 생성

SELECT IF(조건1, 조건1이 참일 때 값1, 조건1이 거짓일 때 값2)
FROM table_name

GROUP BY와 함께 사용

SELECT COUNT(column1)
FROM table_name
GROUP BY IF(조건1, 조건1이 참일 때 값1, 조건1이 거짓일 때 값2)

예시

아래 쿼리는 product_info 테이블에서 IF를 이용하여 Price가 500이하인 제품과 초과인 제품으로 분류하는 컬럼을 만드는 쿼리이다.

IF문을 사용한 쿼리


 

작업환경
MySQL Server 8.2.0
MySQL Workbench 8.0.34

참고

[IF()에 관한 참고 글] MySQL IF Function
[IF statement에 관한 참고 글] MySQL IF Statement