SQL

SQL 조건문 함수 (case when)

수박비빔밥 2024. 3. 20. 23:57
반응형

CASE WHEN 조건문은 SQL에서 조건에 따라 다른 값을 반환하도록 설계된 함수입니다. 이 구문은 데이터를 조회할 때 특정 조건을 기반으로 다른 결과를 보여주고 싶을 때 유용하게 사용할 수 있습니다. 기본적인 형태는 다음과 같습니다:

여기서 조건은 특정한 조건 표현식이며, 해당 조건이 참이면 THEN 뒤의 결과값을 반환합니다. 모든 WHEN 조건이 거짓일 때 ELSE 절이 있으면 그 뒤의 값을 반환합니다. ELSE 절은 선택 사항이기 때문에, 모든 조건이 맞지 않고 ELSE 절이 없는 경우에는 NULL 값을 반환합니다.

 

 

예시 1: 고객 등급에 따른 할인율 반환하기

고객의 등급(VIP, Gold, Silver)에 따라 다른 할인율을 적용하고 싶은 경우 다음과 같이 CASE WHEN 구문을 사용할 수 있습니다.

 

이 코드는 고객 테이블에서 각 고객의 ID와 등급에 따른 할인율을 조회합니다. VIP 고객은 30% 할인, Gold는 20% 할인, Silver는 10% 할인을 받고, 그 외의 등급은 할인을 받지 않습니다.

 

예시 2: 성적에 따른 등급 매기기

학생들의 성적(score)에 따라 A, B, C, D 등급을 매기는 경우, 다음과 같이 구현할 수 있습니다.

이 코드는 학생 테이블에서 각 학생의 ID와 성적을 조회하고, 성적에 따라 A부터 F까지의 등급을 매깁니다. 성적이 90 이상이면 A, 80 이상이면 B, 70 이상이면 C, 60 이상이면 D를 부여하고, 그 외의 경우에는 F 등급을 부여합니다.

 

예시 3: 부서별 직원 평균 급여에 따른 등급 분류

회사에서 각 부서별 직원의 평균 급여를 기반으로 그 부서의 급여 수준 등급을 매기고자 할 때, CASE WHEN 구문과 집계 함수 AVG()를 함께 사용할 수 있습니다. 이 경우, 전체 직원의 평균 급여보다 높은 평균 급여를 가진 부서는 'High', 그보다 낮은 부서는 'Low' 등급을 받도록 설정할 수 있습니다.

이 쿼리는 employees 테이블에서 각 department_id별로 직원들의 평균 급여(avg_salary)를 계산하고, 전체 직원의 평균 급여와 비교하여 해당 부서의 급여 수준 등급(salary_grade)을 'High' 또는 'Low'로 분류합니다. SELECT AVG(salary) FROM employees는 전체 직원의 평균 급여를 계산하여, 각 부서별 평균 급여와 비교하는 기준점으로 사용됩니다.

반응형