반응형

본 글은 책 "칼퇴족 김대리는 알고 나만 모르는 SQL 기초 편"의 정리 내용입니다.

조건문을 적용하면 아래 표와 같이 수학점수에 조건을 적용하여 새로운 열을 생성할 수 있다.

CASE WHEN 


SELECT 열이름1, 
CASE WHEN [조건1] THEN[결과값1]
     WHEN [조건2] THEN[결과값2]
     ELSE [결과값3] END AS 새로운 열 이름 
  • 조건1을 만족하면 결과값1, 조건2를 만족하면 결과값2, 나머지는 결과값3으로 보여주고 결과값은 [새로운 열 이름]으로 나타냄

예제 (직원 연봉 테이블: STAFF_SAL)


ID JOB CURRENT_SAL ENG_SCORE
2148 OFFICER 40000 90
5780 CLERK 32000 98
6870 MANAGER 100000 81
4565 CLERK 30000 79
9687 CLERK 33000 66
7337 MANAGER 100000 95
1321 OFFICER 43000 80
9895 CLERK 30000 50
더보기
CREATE TABLE STAFF_SAL
(
ID INT NOT NULL,
JOB CHAR(20) NOT NULL,
CURRENT_SAL INT NOT NULL,
ENG_SCORE INT NOT NULL,
PRIMARY KEY ('ID')
);

INSERT INTO STAFF_SAL
VALUES
(2148, 'OFFICER', 40000, 90),
(5780, 'CLERK', 32000, 98),
(6870, 'MANAGER', 100000, 81),
(4565, 'CLERK', 30000, 79),
(9687, 'CLERK', 33000, 66),
(7337, 'MANAGER', 100000, 95),
(1321, 'OFFICER', 43000, 80),
(9895, 'CLERK', 30000, 50);

 

Q1. 직업(JOB)이 CLERK는 7%, OFFICER는 5%, MANAGER는 3%로 연봉을 인상하기로 했다. STAFF_SAL 테이블을 사용하여 각 직원별 인상 연봉을 예상해보자

ID JOB CURRENT_SAL NEXT_SAL
2148 OFFICER 40000 42000
5780 CLERK 32000 34240
6870 MANAGER 100000 103000
4565 CLERK 30000 32100
9687 CLERK 33000 35310
7337 MANAGER 100000 103000
1321 OFFICER 43000 45150
9895 CLERK 30000 32100
SELECT ID, JOB, CURRENT_SAL,
	CASE WHEN JOB = 'CLERK' THEN CURRENT_SAL*1.07
		 WHEN JOB = 'OFFICER' THEN CURRENT_SAL*1.05
		 WHEN JOB = 'MANAGER' THEN CURRENT_SAL*1.03
		 ELSE CURRENT_SAL
		 END AS NEXT_SAL
 FROM STAFF_SAL;

 

Q2. 다음 표와 같이 연봉 인상이 직급, 영어 점수와 연관될 경우 테이블을 이용하여 각 직원별 인상 연봉을 예상해보자.

JOB  영어점수 80점 이상 영어점수 80점 미만
CLEAR 7% 6%
OFFICER 5% 4%
MANAGER 3% 2%
ID JOB CURRENT_SAL ENG_SCORE NEXT_SAL
2148 OFFICER 40000 90 42000
5780 CLERK 32000 98 34240
6870 MANAGER 100000 81 103000
4565 CLERK 30000 79 31800
9687 CLERK 33000 66 34980
7337 MANAGER 100000 95 103000
1321 OFFICER 43000 80 45150
9895 CLERK 30000 50 31800
SELECT ID, JOB, CURRENT_SAL,
	CASE WHEN JOB = 'CLERK' AND ENG_SCORE >= 80 
	     THEN CURRENT_SAL * 1.07 
	     WHEN JOB = 'CLERK' AND ENG_SCORE < 80 
		 THEN CURRENT_SAL * 1.06
		 WHEN JOB = 'OFFICER' AND ENG_SCORE >= 80 
		 THEN CURRENT_SAL * 1.05
		 WHEN JOB = 'OFFICER' AND ENG_SCORE < 80 
		 THEN CURRENT_SAL * 1.04
		 WHEN JOB = 'MANAGER' AND ENG_SCORE >= 80 
		 THEN CURRENT_SAL * 1.03
		 WHEN JOB = 'MANAGER' AND ENG_SCORE < 80 
		 THEN CURRENT_SAL * 1.02
		 ELSE CURRENT_SAL
		 END AS NEXT_SAL
FROM STAFF_SAL;
반응형

+ Recent posts