관리 메뉴

여름 언덕에서 배운 것

IF/CASE 본문

가랑비에 옷 젖는 줄 모른다 💻/SQL & DB

IF/CASE

잔뜩 2023. 7. 28. 13:27

https://codingapple.com/

 

코딩애플 온라인 강좌 - 개발자도 단기완성!

단연 NO1 강사님의 NO.1 강의 역시나 명강입니다. IT 업계의 대치동 NO1. 강사같은 엄청난 강의력. 코딩애플님의 강의는, 엄청나게 기초적인 것부터 가르치는 듯 보이지만, 실제로 다루는 깊이는 절

codingapple.com

🍎SQL 짜다 보면 문자나 숫자같은 데이터 넣는 곳이 많습니다.

근데 그 곳에 고정된 값이 아니라 조건에 따라서 각각 다른 값을 넣고 싶은 경우 사용하면 됩니다. 

 

 

IF(조건식, 조건식맞으면이거, 조건식틀리면이거); 
SELECT IF(1 + 2 = 3, '맞음', '틀림'); 

참이면 맞음이 나오고 틀리면 틀림이 나온다.

 

SELECT 고객명, 사용금액, IF(사용금액>200000, "우수", "거지") FROM card; 

if는 양자택일만 가능하다는 점이 단점이다.

20만원 이상이면 우수 10~20이면 준수 10만원 미만 보통 이렇게 3가지는 표현이 안된다.


경우가 3개 이상이면 CASE문법

* 조건식들이 전부 맞지 않을 경우 ELSE 우측에 있는 값을 남겨줍니다. 

CASE 
  WHEN 조건식1 THEN 남길값1
  WHEN 조건식2 THEN 남길값2
  WHEN 조건식3 THEN 남길값3
END 
CASE 
  WHEN 조건식1 THEN 남길값1
  WHEN 조건식2 THEN 남길값2
  WHEN 조건식3 THEN 남길값3
  ELSE 남길값4
END 

 

컴퓨터가 위에서부터 읽다가 참을 만나면 조건식 참에 해당하는 답만 남기고 case 문법 종료

SELECT 고객명, 사용금액,

CASE
  WHEN 사용금액 >= 200000 THEN '우수'
  WHEN 사용금액 >= 100000 AND 사용금액 < 200000 THEN '준수'
  WHEN 사용금액 < 100000 THEN '그지' 
END AS 평가

FROM card;


조건식에 맞으면 바로 CASE 문법을 종료하기 때문에

WHEN 사용금액 >= 100000  THEN '준수' 이걸로 바꿔도 가넝한

문제

SELECT sum(
CASE
	WHEN 고객등급 = 'vip' THEN 3
	WHEN 고객등급 = '로열' THEN 2
	WHEN 고객등급 = '패밀리' THEN 1
END
)FROM card

또는 

SELECT sum(
CASE
	WHEN 고객등급 = 'vip' THEN 3
	WHEN 고객등급 = '로열' THEN 2
	ELSE 1 
END
)FROM card





SELECT SUM(3) FROM card
이렇게 하면 행마다 3을 다 더한다.

사용금액 30만원 이상은 50% 증액, 30만원 미만은 10% 증액해서 사용금액의 총 합계를 출력

SELECT sum(
CASE 
	WHEN 사용금액 > 300000 THEN 사용금액+(사용금액*0.5)
	WHEN 사용금액 < 300000 THEN 사용금액+(사용금액*0.1)
END
) AS 장부조작 FROM card

또는

SELECT SUM(
IF( 사용금액 >= 300000, 사용금액 * 1.5, 사용금액 * 1.1 )
) FROM mart.card

고객 등급 재설정...😲

SELECT 고객명,사용금액,고객등급,
CASE
	WHEN 사용금액 >=300000 THEN 'vip'   (고객등급 = vip 로 적어서 계속 에러)
	WHEN 사용금액 >=200000 THEN '로열'
	ELSE '패밀리'

END AS 변동등급
FROM card

근데 이제 변동될 고객만 출력하려면 

SELECT 고객명,사용금액,고객등급
FROM card
WHERE 고객등급 !=CASE
	WHEN 사용금액 >=300000 THEN 'vip'
	WHEN 사용금액 >=200000 THEN '로열'
	ELSE '패밀리'
END
728x90