IF/IFNULL 함수
IF 함수
IF 함수는 특정 조건에 따라 다른 값을 반환할 때 사용됩니다. 단일 조건뿐 아니라 여러 조건을 다룰 때 중첩된 IF를 사용할 수 있습니다.
기본 구문
IF(조건, 참일 때 반환 값, 거짓일 때 반환 값)
단일 조건 예시
직원 테이블에서 급여(salary)가 70000 이상인 경우 ‘High’, 그렇지 않으면 ‘Low’로 표시하는 예시입니다.
SELECT
employee_name,
salary,
IF(salary >= 70000, 'High', 'Low') AS salary_level
FROM employees;
- salary가 70000 이상이면 salary_level 열에 'High'가 표시되고, 그렇지 않으면 'Low'가 표시됩니다.
다중 조건 (중첩된 IF) 예시
직원 테이블에서 급여가 70000 이상은 ‘High’, 40000~69999는 ‘Medium’, 그 이하는 ‘Low’로 표시하는 예시입니다.
SELECT
employee_name,
salary,
IF(salary >= 70000, 'High',
IF(salary >= 40000, 'Medium', 'Low')) AS salary_level
FROM employees;
- salary가 70000 이상이면 salary_level이 'High', 40000~69999면 'Medium', 그 이하면 'Low'가 됩니다.
IFNULL 함수
IFNULL 함수는 NULL 값을 다른 값으로 대체할 때 사용됩니다. NULL 값을 처리할 때 매우 유용합니다.
기본 구문
IFNULL(표현식, NULL일 때 대체할 값)
예시
직원 테이블에서 보너스(bonus) 값이 NULL이면 ‘No Bonus’로 표시하는 예제입니다.
SELECT
employee_name,
IFNULL(bonus, 'No Bonus') AS bonus_status
FROM employees;
- bonus 값이 NULL이면 bonus_status 열에 'No Bonus'가 표시되고, 그렇지 않으면 bonus의 실제 값이 표시됩니다.
IF와 IFNULL의 조합
IF와 IFNULL을 함께 사용하여 NULL 여부를 확인한 후 조건에 맞게 값을 반환할 수 있습니다.
예시
직원 테이블에서 salary가 NULL인 경우 0으로 간주하고, 급여가 50000 이상이면 ‘Eligible for Promotion’, 그렇지 않으면 ‘Not Eligible’로 표시하는 예제입니다.
SELECT
employee_name,
salary,
IF(IFNULL(salary, 0) >= 50000, 'Eligible for Promotion', 'Not Eligible') AS promotion_status
FROM employees;
- salary가 NULL인 경우 0으로 처리하고, 50000 이상이면 promotion_status에 'Eligible for Promotion', 그 외에는 'Not Eligible'이 표시됩니다.
요약
- IF: 조건에 따라 다른 값을 반환하는 함수.
- 단일 조건: IF(조건, 참일 때 값, 거짓일 때 값)
- 다중 조건: 중첩된 IF로 여러 조건을 처리 가능.
- IFNULL: NULL 값을 특정 값으로 대체하는 함수.
- 예: IFNULL(열 이름 또는 표현식, NULL일 때 대체할 값)
- IF와 IFNULL 조합: NULL 여부를 확인 후 조건에 따라 값을 결정할 수 있음.
- 예: IF(IFNULL(salary, 0) >= 50000, 'Eligible for Promotion', 'Not Eligible')
이러한 조건 함수들은 데이터를 상황에 맞게 변환하거나 결측치를 다룰 때 매우 유용합니다. IF, IFNULL문을 상황에 맞게 활용하면 SQL 쿼리에서 복잡한 조건을 쉽게 처리할 수 있습니다.
CASE 함수
CASE 함수는 SQL에서 다중 조건을 처리할 때 매우 유용한 함수입니다. CASE 함수는 여러 조건을 설정하여 각 조건에 맞는 값을 반환할 수 있으며, 복잡한 조건을 간결하게 표현할 수 있어 가독성이 좋습니다.
CASE 함수 기본 구조
CASE 함수는 조건에 따라 다른 값을 반환하는 구조입니다. WHEN 절에 조건을 작성하고, 조건이 참이면 THEN 절의 값을 반환합니다. 조건이 하나도 성립하지 않으면 ELSE 절의 값이 반환됩니다.
기본 구문
CASE
WHEN 조건1 THEN 반환값1
WHEN 조건2 THEN 반환값2
...
ELSE 기본 반환값
END
- WHEN 절에 조건을 작성합니다.
- THEN 절에 조건이 참일 때 반환할 값을 작성합니다.
- ELSE 절에는 모든 조건이 거짓일 때 반환할 값을 작성하며, ELSE는 선택 사항입니다.
- END로 CASE문을 닫습니다.
예시 1: 직급에 따른 부서 표시
직원 테이블에서 직급(position)에 따라 부서를 설정하는 예제입니다.
- 'Manager'는 'Management', 'Engineer'는 'Engineering', 'Sales'는 'Sales'로 지정하고, 그 외의 직급은 'Other'로 설정합니다.
SELECT
employee_name,
position,
CASE
WHEN position = 'Manager' THEN 'Management'
WHEN position = 'Engineer' THEN 'Engineering'
WHEN position = 'Sales' THEN 'Sales'
ELSE 'Other'
END AS department
FROM employees;
- position 값에 따라 department 열에 각 부서가 표시됩니다. position이 'Manager'이면 'Management', 'Engineer'이면 'Engineering', 'Sales'이면 'Sales', 그 외의 값이면 'Other'가 표시됩니다.
예시 2: 급여 수준에 따른 분류
직원 테이블에서 급여(salary) 수준에 따라 직원의 급여 등급을 분류하는 예제입니다.
- salary가 **80000 이상이면 ‘High’, 50000 이상 79999 이하면 ‘Medium’, 그 이하면 ‘Low’**로 분류합니다.
SELECT
employee_name,
salary,
CASE
WHEN salary >= 80000 THEN 'High'
WHEN salary >= 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
- salary 값에 따라 salary_level 열에 'High', 'Medium', 'Low'가 표시됩니다. 첫 번째 조건부터 평가되며, 조건이 참이면 해당 값을 반환하고 나머지 조건은 평가되지 않습니다.
예시 3: CASE와 집계 함수 결합
CASE문을 사용해 특정 조건을 만족하는 값만 선택적으로 집계할 수 있습니다. 예를 들어, 직원 테이블에서 각 부서별로 급여가 60000 이상인 직원의 수를 구할 수 있습니다.
SELECT
department,
COUNT(CASE WHEN salary >= 60000 THEN 1 END) AS high_salary_count
FROM employees
GROUP BY department;
- CASE문은 조건을 만족하면 1을 반환하고, 그렇지 않으면 NULL을 반환합니다. COUNT 함수는 NULL 값을 무시하므로, 결과적으로 salary가 60000 이상인 직원의 수만 집계됩니다.
예시 4: 중첩된 CASE문
CASE문 안에 CASE문을 중첩하여 사용해도 됩니다. 다만, 중첩된 CASE문은 복잡해질 수 있어 가독성을 주의해야 합니다.
직원 테이블에서 급여와 보너스 상태에 따라 직원의 급여 상태를 분류하는 예제입니다.
- 급여가 **80000 이상이면 보너스 여부에 따라 ‘High with Bonus’ 또는 ‘High without Bonus’**로 표시하고, 그 외의 경우 급여 수준에 따라 **‘Medium’ 또는 ‘Low’**로 표시합니다.
SELECT
employee_name,
salary,
bonus,
CASE
WHEN salary >= 80000 THEN
CASE
WHEN bonus IS NOT NULL THEN 'High with Bonus'
ELSE 'High without Bonus'
END
WHEN salary >= 50000 THEN 'Medium'
ELSE 'Low'
END AS salary_status
FROM employees;
- salary가 80000 이상일 경우 다시 bonus 값에 따라 상태가 세분화됩니다. 이처럼 CASE문 안에 또 다른 CASE문을 사용할 수 있습니다.
IF, IFNULL, 그리고 CASE 함수는 SQL에서 조건에 따라 값을 반환하거나, 결측치를 처리하고, 데이터를 다중 조건으로 분류하는 데 매우 유용한 기능들입니다. 이러한 함수들을 활용하면 데이터의 가독성을 높이고, 보다 직관적으로 분석을 진행할 수 있습니다.
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 개념 정리 9] 서브쿼리 (3) | 2024.11.15 |
---|---|
[SQL 개념 정리 8] CTE (WITH 문) (0) | 2024.11.14 |
[SQL 개념 정리 6] WINDOW 함수 (0) | 2024.11.13 |
[SQL 개념 정리 5] 연결(JOIN) 쿼리 (0) | 2024.11.13 |
[SQL 개념 정리 4] 변환 쿼리 (0) | 2024.11.13 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!