목차
IF / CASE
- 조건에 따라서 결과를 다르게 출력해줘야 하는 경우가 있습니다. 이럴 때 사용하는 것이 IF / CASE 입니다.
IF
- IF () 는 양자택일밖에 하지 못합니다.
-
IF (조건색, 참이면뱉을값, 거짓이면뱉을값)
-
- 예시
- 사용금액이 20만원 이상이면 우수고객, 아닐 경우 일반고객 출력하기
-
SELECT 고객명, 사용금액, IF (사용금액>200000, '우수고객', '일반고객') AS 등급 FROM card
-
- 사용금액이 20만원 이상이면 우수고객, 아닐 경우 일반고객 출력하기
CASE
- CASE는 여러 개의 조건식을 걸어줄 수 있습니다.
-
CASE WHEN 조건식1 THEN 남길값1 WHEN 조건식2 THEN 남길값2 WHEN 조건식3 THEN 남길값3 ELSE 나머지값 END
-
- 예시
- 사용금액이 200000이상이면 최우수고객, 100000~200000 사이면 우수고객, 10만원 미만이면 일반고객 출력하기
-
SELECT 고객명,사용금액, CASE WHEN 사용금액>=200000 THEN '최우수고객' WHEN 사용금액>=100000 THEN '우수고객' ELSE '일반고객' END AS 등급 FROM card;
-
- 고객등급이 vip 면 3점, 로열이면 2점, 그 외일 경우 1점을 부여할 때, 모든 고객 점수는 몇 점인지 출력하기
-
SELECT sum( CASE WHEN 고객등급='vip' THEN 3 WHEN 고객등급='로열' THEN 2 ELSE 1 END ) AS 총점 FROM card;
-
- 사용금액이 200000이상이면 최우수고객, 100000~200000 사이면 우수고객, 10만원 미만이면 일반고객 출력하기
예제
- card 테이블에서 사용금액 30만원 이상은 50% 증액, 30만원 미만은 10% 증액해서 사용금액의 총합계를 출력해 보기.
-
SELECT SUM( IF (사용금액>=300000, 사용금액*1.5, 사용금액*1.1) ) AS 총합계 FROM card;
-
SELECT SUM( CASE WHEN 사용금액>=300000 THEN 사용금액*1.5 ELSE 사용금액*1.1 END ) AS 총합계 FROM card;
-
- 고객등급을 재설정해보기 사용금액이 30만원 이상은 vip 20만원이상 30만원 미만은 로열 그 외엔 패밀리로 다시 설정해보기(고객등급이 바뀐 이름만 출력하기)
-
SELECT 고객명,사용금액, CASE WHEN 사용금액>=300000 THEN 'vip' WHEN 사용금액>=200000 THEN '로열' ELSE '패밀리' END AS 등급 FROM card WHERE 고객등급 !=(CASE WHEN 사용금액>=300000 THEN 'vip' WHEN 사용금액>=200000 THEN '로열' ELSE '패밀리' END)
-
출처
'Database > MySQL' 카테고리의 다른 글
UNION (SELECT 결과들 합치기) (0) | 2024.03.12 |
---|---|
JOIN (INNER, LEFT, RIGHT, FULL) (0) | 2024.03.12 |
그룹지어 통계내기 (GROUP BY) (0) | 2024.03.02 |
select 안에 select (서브쿼리) (1) | 2024.03.01 |
컬럼 출력시 사칙연산 넣기 / 문자,숫자 다루는 함수 (1) | 2024.02.29 |