- 구성 요소
: SELECT 절
CASE WHEN 조건 값 THEN 조건이 참일 때 값 (ELSE 조건이 거짓일떄 값) END AS "컬럼명"
* (else 거짓일 떄 값): 생략가능 하며, 생략시 거짓일 때 값은 null로 고정된다.
- 필수 요소
- CASE: 구문의 시작을 알리는 키워드
- WHEN : 조건을 지정
- THEN: 조건이 참일때 반환값을 지정
-END: 구문 종료를 알리는 키워드- 선택사항
- ELSE : 모든 WHEN 조건이 거짓일때 반환 값 지정 (생략시 NULL 반환)
- AS : 반환된 값을 참조할 별칭 지정 (생략가능)
: 학생들의 점수를 알파벳 등급으로 나누고 싶은 상황
예시 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을 결합하여 사용
------------------------ <<< 여기서 부터 복습 재시작
: 각 제품의 카테고리별 판매량이 궁금한 상황
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
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
컬럼 값이 ~ 이거나, ~ 이면서 라는 조건을 추가해야 하는 상황
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= '쩀')