데이터 처리 도구/SQL

[MySQL] 조건문 (CASE문, IF함수, IFNULL함수)

yourhm 2022. 5. 6. 16:06

CASE문

CASE
    WHEN (A조건) THEN (A조건이 True 일 때 반환할 값)
    WHEN (B조건) THEN (B조건이 True 일 때 반환할 값)
    ELSE (위의 조건이 모두 False 일 때)
END

• ELSE에 값을 지정해주지 않으면 해당 값은 자동으로 NULL값 반환한다.
• ELSE를 아예 생략하는 경우에도 ELSE NULL이 자동으로 지정된다.
• WHEN절 두 개를 썼는데 두 조건에 전부 부합하는 값이 있는 경우, 그 값은 먼저 기재된 WHEN절에 부합되어 반환할 값이 정해졌기 때문에 다음 WHEN절 조건에는 걸리지 않는다.

 

 

CASE문 활용(1) 새로운 컬럼 만들기

SELECT CASE
            WHEN Country = 'Germany' AND PostalCode = 12209 THEN 'Germany_A'
            WHEN Country = 'Germany' AND PostalCode = 68306 THEN 'Germany_B'
            WHEN Country = 'Germany' AND PostalCode = 80805 THEN 'Germany_C'
       		ELSE 'Germany_ETC'
       END AS 'Germany_Type'
       , *
FROM Customers

 

 

CASE문 활용(2) 새로운 컬럼 만든 후, 그 컬럼을 기준으로 그룹핑하기

SELECT CASE
            WHEN Country = 'Germany' OR Country = 'Austria' THEN 'EUROPE_A'
            WHEN Country = 'UK' OR Country = 'France' THEN 'EUROPE_B'
            WHEN Country = 'USA' OR Country = 'Canada' THEN 'NorthAmerica_A'
            ELSE 'ETC'
       END AS 'Continent_Type'
       , COUNT(*)
FROM Customers
GROUP BY Continent_Type

 

 

CASE문 활용(3) 그룹핑된 결과를 가로로 펼쳐서 조회하기 (=데이터 피봇팅)

SELECT AVG(CASE WHEN CategoryID = 1 THEN price ELSE NULL END) AS 'Category1_Price'
     , AVG(CASE WHEN CategoryID = 2 THEN price ELSE NULL END) AS 'Category2_Price'
     , AVG(CASE WHEN CategoryID = 3 THEN price ELSE NULL END) AS 'Category3_Price'
FROM Products

 

 

 

IF 함수

IF(조건, 조건이 True일 때 반환할 값, 조건이 False일 때 반환할 값)

 

 

The default return type of IF() is calculated as follows :

  True일 때 반환할 값과 False일 때 반환할 값 중 하나라도 문자열(string)인 경우 ⇒ 반환 값은 문자열(string)

  True일 때 반환할 값과 False일 때 반환할 값이 모두 문자열(string)인 경우, 두 문자열 중 하나가 대소문자를 구분하면 ⇒ 반환 값은 대소문자를 구별한다.(case-sensitive) 

  True일 때 반환할 값과 False일 때 반환할 값 중 하나라도 소수점(floating-point value)인 경우 ⇒ 반환 값은 소수점(floating-point value)

  True일 때 반환할 값과 False일 때 반환할 값 중 하나라도 정수(integer)인 경우 ⇒  반환 값은 정수(integer)

 

IFNULL 함수

IFNULL(data, null일 때 반환할 값)

•  IFNULL() 함수는 첫번째 인자에 넣은 data가 null이 아니면 data를 그대로 반환하고, null이라면 두번째 인자에 넣은 값을 반환한다.

SELECT IFNULL(1,0);
-- Output -> 1

SELECT IFNULL(NULL,10);
-- Output -> 10

SELECT IFNULL(1/0,10);
-- Output -> 10

SELECT IFNULL(1/0,'yes');
-- Output -> 'yes'

 

 

 

[참고자료]

MySQL 8.4 Reference Manual  /  Functions and Operators  /  Flow Control Functions

https://dev.mysql.com/doc/refman/8.4/en/flow-control-functions.html#function_if

 

MySQL :: MySQL 8.4 Reference Manual :: 14.5 Flow Control Functions

14.5 Flow Control Functions Table 14.7 Flow Control Operators Name Description CASE Case operator IF() If/else construct IFNULL() Null if/else construct NULLIF() Return NULL if expr1 = expr2 CASE value WHEN compare_value THEN result [WHEN compare_value

dev.mysql.com

 

mysqltutorial - IF statement (IF() function과 다름!)

https://www.mysqltutorial.org/mysql-if-statement/

 

MySQL IF Statement

This tutorial shows you how to use MySQL IF statement to execute a block of SQL code based on a specified condition.

www.mysqltutorial.org