[SQL] 연습

[SQL] CASE문

Simon Yoon 2022. 7. 2. 23:57

SQL에서 CASE문이란?

SQL에서의 CASE문은 엑셀에서 IF() 함수를 떠올리면 이해하기 쉽습니다.

엑셀에서 IF() 함수는 아래와 같이 조건문에 대한 판단에 따라 참인 경우와 아닌 경우로 나뉘어서 작동하게 되는데요.

*엑셀에 대한 참고: <[Excel] 엑셀 데이터 분석 기본> https://simon-yoon.tistory.com/29

 

SQL에서의 CASE문도 기본적으로 다음과 같이 작성할 수 있습니다.

CASE로 CASE문을 시작하고 영어 문장 쓰듯이 자연스럽게 WHEN <조건> 쓰고 THEN 뒤에 출력할 내용을 작성하면 됩니다.

 

SQL 쿼리 작성 예시

이제 MySQL에서 world 데이터베이스를 사용하여 쿼리를 작성해 보겠습니다.

아래는 world 데이터베이스의 country 테이블 일부입니다. 저는 여기서 빨간 박스로 표시한 population 컬럼을 이용하여 인구수에 따른 새로운 컬럼을 생성할 것입니다.

country 테이블 일부

나라별로 인구가 10억 이상, 1억 이상, 1억 이하인 경우로 나눈 컬럼을 추가하여 출력하는 쿼리문은 아래와 같이 작성할 수 있을 것입니다.

select name, population,
	case when population > 1000000000 then 'upper 1b'
    when population > 100000000 then 'upper 100m'
    else 'below 100m'
    end as pop_group
from country
;

위의 쿼리를 실행하여 결과를 확인해보면 아래와 같이 각 나라별로 잘 분류되었음을 확인할 수 있습니다.

실행 결과 일부

 

CASE와 GROUP BY를 함께 사용하는 방법

만약 방금처럼 결과를 조회했을때, 각 pop_group별로 몇 개의 국가들이 속해있는지를 확인하고 싶다면 어떻게 할 수 있을까요?

이때는 select절을 약간 수정하고 group by를 붙여서 작성할 수 있을 것입니다.

select 
    case when population > 1000000000 then 'upper 1b'
    when population > 100000000 then 'upper 100m'
    else 'below 100m'
    end as pop_group,
    count(1) as cnt
from country
group by pop_group
;

select절에서 case문을 작성하고 count()함수를 사용해 준 뒤에, group by <컬럼명> 을 붙이면 됩니다. 이렇게 작성한 쿼리를 실행하면 아래와 같은 결과를 확인할 수 있습니다.