CASE WHEN절

dorongpark·2024년 6월 4일
0

해커랭크(sql)

목록 보기
5/20
  • 특정 컬럼 값을 어떤 조건으로 나눠 새로운 컬럼을 만들고 싶을 떄 사용
    : SELECT
    CASE WHEN 조건 값 THEN 조건이 참일 때 값 ELSE 조건이 거짓일떄 값 END AS "컬럼명"

  • 필수 요소
    - 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

  • 변환된 테이블


집계 함수 + CASE WHEN 절 사용

  • 조건에 해당하는 데이터들의 집계가 필요 할때 사용하며, 이를 통해 다양한 조건에 따라 데이터를 그룹화 가능(GROUP BY)

예시

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

  • 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

  • 쿼리 결과

profile
야 너도 분석 할수 있어

0개의 댓글