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
mysqltutorial - IF statement (IF() function과 다름!)
https://www.mysqltutorial.org/mysql-if-statement/
'데이터 처리 도구 > SQL' 카테고리의 다른 글
[MySQL] Numeric Functions and Operators (1) (0) | 2022.08.25 |
---|---|
[MySQL] 날짜/시간 다루기 (1) (0) | 2022.05.06 |
[MySQL] 집계 함수와 GROUP BY절, HAVING절 (0) | 2022.05.05 |
[MySQL] 조건에 맞는 데이터 조회하기(WHERE절), 정렬하기(ORDER BY절) (0) | 2022.05.04 |
[MySQL] 데이터 꺼내오기, LIMIT & OFFSET (0) | 2022.05.04 |