CASE WHEN절

dorongpark·2024년 6월 4일
0

해커랭크(sql)

목록 보기
5/23
  • 특정 컬럼 값을 어떤 조건으로 나눠 새로운 컬럼을 만들고 싶을 떄 사용
  • 구성 요소
    : SELECT 절
    CASE WHEN 조건 값 THEN 조건이 참일 때 값 (ELSE 조건이 거짓일떄 값) END AS "컬럼명"
    * (else 거짓일 떄 값): 생략가능 하며, 생략시 거짓일 때 값은 null로 고정된다.
  • 필수 요소
    - CASE: 구문의 시작을 알리는 키워드
    - WHEN : 조건을 지정
    - THEN: 조건이 참일때 반환값을 지정
    -END: 구문 종료를 알리는 키워드
  • 선택사항
    - ELSE : 모든 WHEN 조건이 거짓일때 반환 값 지정 (생략시 NULL 반환)
    - AS : 반환된 값을 참조할 별칭 지정 (생략가능)

  • 예시1(하나의 컬럼 생성) students 테이블

: 학생들의 점수를 알파벳 등급으로 나누고 싶은 상황

  • 코드
    SELECT student_id , student_name,
    case when score >= 90 then "A"
    when score >=80 then "B"
    when score >=70 then "C"
    when score >=60 then "D"
    else "F" END AS "grade" ----- 하나의 컬럼에 여러개의 조건값이 들어감(end 1회 사용 = 1개의 컬럼 생성)
    from students
  • 변환 된 테이블

예시 2 (두개 이상의 컬럼 생성)

: 위와 동일한 students 테이블에서 점수가 60 이상인 학생은 pass , 60미만인 학생은 failure 구분하는 컬럼 생성

  • 코드

SELECT student_id , student_name,
case when score >= 90 then "A"
when score >=80 then "B"
when score >=70 then "C"
when score >=60 then "D"
else "F" END AS "grade" , ---- ①첫번째 case when절 = 컬럼 1개
case when grade >=60 then "pass" else "failure" END AS "pass_fail" -- ② 두번째 case when절 = 컬럼 1개
from students

  • 변환된 테이블


GROUP BY와 집계 함수의 CASE WHEN을 이용한 피봇팅

행 → 열 로 변환하는 피봇팅 가능
(* 데이터의 행과 열을 보고싶은대로 조작 가능)

▶GROUP BY시 행 레벨로 만들어진 데이터를 열 레벨로 전환할때 집계 함수와 CASE WHEN을 결합하여 사용

------------------------ <<< 여기서 부터 복습 재시작

예시

: 각 제품의 카테고리별 판매량이 궁금한 상황

  • SQL 문

SELECT category,
SUM(CASE WHEN category ='전자기기' then sales else 0) END AS "전자기기 판매량",
SUM(CASE WHEN category='가구' then sales else 0) END AS "가구 판매량

FROM products
GROUP BY 1

  • sum을 then 조건으로만 쓰면 오류가 난다
    case when type = '냉동' then sum(quantity) else 0 end as "냉동입고량", (x)
  • 쿼리 결과

예시2

select ppc,
sum(case when type = '냉동' then quantity else 0 end) as "냉동입고량",
sum(case when type = '냉장' then quantity else 0 end) as "냉장입고량",
sum(case when type = '상온' then quantity else 0 end) as "상온입고량"
from 입고량
group by ppc

case when 조건에 and/or 조건 넣기

컬럼 값이 ~ 이거나, ~ 이면서 라는 조건을 추가해야 하는 상황
SELECT
case when
(2d = '빵' or 2d =' 떡')---- ① and (3d = '초콜렛') --- ② then 'Y' END AS "Y값 구분"
: 한 조건에 괄호와 AND/OR를 사용 하여 조건에 맞는 값을 가져올 수 있다. 다만 괄호를 연결하는 AND/OR을 제외하괴 괄호 안의 AND/OR은 컬럼 값을 중복 해서 사용한다. EX) (2d = '빵' or 2d = '떡' or 2d= '쩀')

profile
야 너도 분석 할수 있어

0개의 댓글