데이터 분석/SQL

[ORACLE/SQL]SELECT문 안에 CASE 사용하기(feat.행열변화)

22rodnjf 2021. 5. 1. 09:48

studiolettuce.tistory.com/36

 

[ORACLE/SQL]SELECT 문과 FROM문

SQL 구문을 사용하기 위해서는 가장 먼저 SELECT와 FROM 두 가지에 대해 이해합니다. 쉽게 표현하자면 FROM은 불러올 TABLE, SELECT는 FROM 절에서 불러온 데이터중 표현할 값들을 뜻합니다. SELECT * FROM COUNT

studiolettuce.tistory.com

CASE 문을 사용하게 되면 SELECT로 불러온 컬럼의 값을 원하는 형태로 정리할 수 있습니다.

이를 사용하는 가장 많은 이유는 기존에 수치형으로 이루어진 데이터를 범주형으로 변경해서 원하는 형태로 가공하기 위함입니다.

또한 ORACLE 11G 부터 PIVOT을 통해서 지원하고는 있지만, 만약 PIVOT으로 행열의 변화가 힘든 상황이라면 행열의 변화 역시 진행할 수 있습니다.

SELECT *
FROM STD_TEST

위의 구문을 사용해서 아래의 데이터 셋을 불러온다고 가정하겠습니다.

일반적으로 사용할 수 있는 학생의 차수별 성적을 정리한 데이터 입니다.

여기서 사용할 값은 STD_NAME, STD_CODE, STD_CLASS, FIRST_TEST 만 사용한다고 가정하겠습니다.

SELECT
STD_NAME,
STD_CODE,
STD_CLASS,
FIRST_TEST

FROM STD_TEST

SELECT, FROM 문 사용법에서 알려 드렸던 것처럼 이렇게 쿼리를 작성하게 될 경우 SECOND_TEST, THIRD_TEST가 빠진 아래 형태의 데이터가 불러와지게 됩니다.

그럼 여기서 점수를 구간을 만들어서 범주형 데이터로 변경하겠습니다.

SELECT 
STD_NAME,
STD_CODE,
STD_CLASS,
CASE WHEN FIRST_TEST > 50 AND FIRST_TEST <= 59 THEN '50점대'
     WHEN FIRST_TEST > 60 AND FIRST_TEST <= 69 THEN '60점대'
     WHEN FIRST_TEST > 70 AND FIRST_TEST <= 79 THEN '70점대'
     WHEN FIRST_TEST > 80 AND FIRST_TEST <= 89 THEN '80점대'
     WHEN FIRST_TEST > 90 AND FIRST_TEST <= 99 THEN '90점대'
     WHEN FIRST_TEST = 100                     THEN '100점'
     ELSE '미달'   END                         AS FIRST_TEST
     
FROM STD_TEST

실행 결과는 아래의 표와 같이 나타나게 됩니다.

CASE 문은 이와 같이 컬럼을 불러오는 과정에서 다양한 방식으로 변경을 해서 불러올 수 있습니다.


추가적으로 현재는 PIVOT 기능을 이용해서 사용할 수 있지만 행과 열의 위치를 변환할 때도 역시 사용할 수 있습니다.

위의 데이터를 일부 변형시킨 데이터입니다.

 STD_CLASS에 대해 범주를 추가했습니다. 이 범주를 점수를 기준으로 가로로 더 길게 표현하는 방법입니다.

SELECT
STD_NAME,
STD_CODE,
CASE WHEN STD_CLASS = 'MATH' THEN FIRST_TEST END      AS MATH_FIRST_TEST,
CASE WHEN STD_CLASS = 'SCIENCE' THEN FIRST_TEST END   AS SCIE_FIRST_TEST

FROM STD_TEST

실행 결과는 아래의 표와 같이 나오게 됩니다.

이렇게 세로형으로 범주가 들어가 있는 데이터를 편하게 행열 형태로 변경할 수 있습니다.

 

'데이터 분석 > SQL' 카테고리의 다른 글

[ORACLE/SQL]WHERE 절의 이용  (0) 2021.04.20
[ORACLE/SQL]SELECT 문과 FROM문  (0) 2021.04.19