SQL CASE절 활용하기

생각하는 마리오네트·2022년 4월 20일
0

SQL

목록 보기
37/39

매일 쿼리를 날리지만 오늘 CASE절을 어떻게 사용할지 확실하게 경험하게 되어 어떨때 사용할 수 있는 지 짧게 기록해보려고 한다.

먼저 CASE절의 기본 매커니즘은 다음과 같다.

CASE WHEN "조건1" THEN "출력1"
     WHEN "조건2" THEN "출력2" -- (선택)
     ELSE "출력3" -- (선택)
END
  1. CASE 와 END는 CASE절을 사용하기 위해 열고 닫는 느낌으로 사용한다.
    "CASE ~~~ END" 의 느낌이다.

  2. WHEN 과 THEN, ELSE는 영어 단어를 함께 생각해 보면 쉽다. WHEN 은 -하면 즉, 조건이다(어떤조건이 주어지면), THEN은 그러면의 뜻이다. 앞에있는 WHEN절에서 조건이 주어지면 THEN(그러면 다음과 같이 출력할것이다)의 의미이고, ELSE -이외 라는 뜻으로 앞의 조건에 포함되지 않는다면 그외의 상황에는 다음과 같이 출력할 것이다.

  3. WHEN은 하나만 쓰고 ELSE는 안써도 무방하다 즉 두번째 WHEN과 ELSE는 선택이고 조건이 많다면 WHEN을 여러개 늘려도 가능하다.

예시를 통해 활용방법을 알아보면 아래와 같다.

먼저, 예를 들기 위한 테이블을 준비해보았다.

지역연령(세)인구수(명)
서울 서초구0100
서울 서초구1420
서울 서초구2560
---
서울 서초구1002
서울 종로구090
서울 종로구1600
---
서울 관악구1001

( -는 생략 표시)

위와같이 서울시의 모든 시군구 별로 0세부터 100세까지 인구수를 표현하고 있는 데이터가 있다고 가정하자.(테이블명 : population_age)

어느날 국가에서 각 시군구별로 65세이상의 고령자분들의 인구비율을 알고 싶다고 했을 때 어떻게 출력해야할까..

SQL을 입문한 사람들이라면 잠시 생각해봤을때 방법이 떠오르지 않을것이다.

이때 사용할 수 있는 방법중 하나가 CASE절을 활용하는 것이다.

우선 정답 쿼리는 아래와 같다.

SELECT T1.지역,(T1.고령인구 / T1.총인구수) AS 고령비율 --1
FROM( --2 
      SELECT 지역, --3
             SUM( --4
                 CASE WHEN 연령() >=65 THEN 인구수() --5
                 END --6
                 ) AS 고령인구, --7
             SUM(인구수()) AS 총인구수 --8
--9
      FROM population_age --10
      GROUP BY 지역 --11
	 ) AS T1 --12
  1. 먼저 고령인구 비율의 계산 방법을 먼저 생각 해보면 아래와 같다.
    • (고령 인구수 합계 / 총인구수 합계) = 고령인구 비율
  1. 2번줄부터 11번줄 까지 서브쿼리이며 이를 합쳐서 T1으로 지정한다.
  1. 지역별로 고령인구 비율을 구해야 하므로 11번줄에 GROUP BY 에 지역을 넣어주었다.
  1. 묶어주었으니 3번에 지역을 반드시 넣고 그외의 SELET는 집계를 해주어야 한다. 4번에 7번까지 연령이 65세이상인것의 인구수(명)의 합계를 선택할것이고 이를 "고령인구"라는 컬럼으로 구분하기 쉽게 저장한다.
  1. 4번에서 고령인구수 합계를 구했으니 다음은 총인구수 합계를 구해야한다. 따라서 8번줄에서 인구수(명)의 전체를 SUM으로 집계하여 준다.
  1. 여기까지를 모두 서브쿼리로 묶은후 1번줄 SELECT 로 가서 지역과 고령인구비율을 구하는 수식을 작성하고 이를 "고령비율"로 저장하면 완성된다.

더좋은 방법이 있으면 공유부탁드립니다~

profile
문제를해결하는도구로서의"데이터"

0개의 댓글