MySQL CASE 문
MySQL CASE 문
CASE 문
- 단순
CASE 문은 특정 컬럼의 값이A면X,B면,Y와 같이 명확하게 정해진 값을 비교할 때 사용 - 검색
CASE 문은 WHEN절 마다 독립적인 조건식을 사용하여 복합적인 조건을 처리할 때 사용 CASE 문은 위에서 아래로 순차적으로 조건을 평가하며, 가장 먼저 참이 되는 조건의 결과를 반환하고 즉시 평가 종료SELECT,ORDER BY,GROUP BY,WHERE절에서도 사용되어 데이터의 표현, 정렬, 그룹화 등 다양한 로직에서 활용할 수 있음
문법
1
2
3
4
5
SELECT CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE 그_외의_경우_결과
FROM table1
CASE문 그룹핑
- 1단계(분류):
CASE 문으로 각 행에 원하는 분류 라벨을 붙임 - 2단계(집계): 1단계에서 만든 라벨을 기준으로
GROUP BY하고,COUNT()같은 집계 함수로 그룹별 통계를 구함 SELECT절에서CASE 문에 부여한 별칭을GROUP BY절에서 사용하여 쿼리를 간결하게 만들 수 있음
문법
1
2
3
4
5
6
7
8
9
SELECT CASE
WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
ELSE '그_외의_경우_결과'
END AS c1 COUNT(*) AS '개수'
FROM
table1
GROUP BY
c1;
CASE문 조건부 집계
- CASE 문을 SUM이나 COUNT 같은 집계 함수 내부에 넣어 사용하는 강력한 기법
- 각 조건별로 서브쿼리를 여러 번 사용하면 성능이 저하되므로, 조건부 집계는 테이블을 한 번만 읽어 효율적으로 처리하는 방법
SUM(CASE WHEN 조건 THEN 1 END)처럼 사용하여 합계를 구하는 식으로 사용- 조건부 집계를
GROUP BY와 함께 사용하면, 카테고리별, 상태별 주문 건수 처럼 다차원적인 분석 보고서를 효울적으로 생성할 수 있음
문법
1
2
3
4
SELECT COUNT(*) AS total_orders,
SUM(CASE WHEN 조건1 THEN 1 ELSE 0 END) AS c1_count,
SUM(CASE WHEN 조건2 THEN 1 ELSE 0 END) AS c2_count,
FROM orders;
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.