기록과 정리

SQL 조건문 - CASE 본문

IT/DB

SQL 조건문 - CASE

zepetto 2021. 9. 1. 19:04

이 글은 '[백문이불여일타] 데이터 분석을 위한 중급 SQL' 강의를 참고하였습니다.

https://www.inflearn.com/course/%EB%B0%B1%EB%AC%B8%EC%9D%B4%EB%B6%88%EC%97%AC%EC%9D%BC%ED%83%80-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EA%B8%B0%EC%B4%88-sql/lecture/29718?tab=note 

 

[백문이불여일타] 데이터 분석을 위한 기초 SQL - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

sql에서도 if 와 같은 분기 처리할 수 있는데 그중 case문을 정리해보도록 한다.

CASE

Products

해당 테이블에 카테고리 ID에 따라서 분기를 해주는 작업을 해주고 싶다. 예를 들어 1이면 음료, 2이면 조미료, 그 외에는 기타로 출력을 하고 싶다고 하면 다음과 같이 쿼리를 작성한다. 

 

CASE 

         WHEN 조건 1 THEN 결과 1
         .....

END

 

case문
쿼리 결과

case문 외에 컬럼과 case문에 alias를 넣어주면 더욱 깔끔하게 쿼리를 조회 가능하다.

alias 및 다른 컬럼(*) 도 조회해보자.

 

case문 안에는 논리연산자를 넣을 수 있어 , or나 and로 데이터를 더 묶어서 분기를 줄 수 있다. 

응용을 해보면 , 전체 카테고리 평균이 궁금하기보다 몇몇 칼럼의 평균이 궁금하다고 하면 어떻게 할까?

몇몇 컬럼에 대해 조건별로 case를 만들어주고, group by 시켜주어 평균을 구하는 게 답이 된다.

1,2 그리고 나머지는 기타들의 평균을 구해보자
결과

case문을 잘 이용하면 pivoting 이 가능한데, pivoting이란 테이블을 방향을 뒤집은 것(?)이라고 생각하면 쉽다. 

category1_price라는 컬럼을 생성

categoryid = 1인 경우 price를 출력하게 하는 category1_price라는 칼럼을 생성할 수 있다.

1이 아니면 null로 출력
응용

categoryid =1 ,2, 3 각각의 경우 평균값을 피보팅 시켜보자.

다음과 같이 결과를 얻을 수 있다.