반응형
본 글은 책 "칼퇴족 김대리는 알고 나만 모르는 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;
반응형
'SQL' 카테고리의 다른 글
[SQL] 숫자 데이터 요약하기 (SUM, AVG, MAX, MIN, STDENV, VARIANCE) (0) | 2022.02.16 |
---|---|
[SQL] 행의 수 세기 (COUNT) (0) | 2022.02.14 |
[SQL] 숫자 함수 (0) | 2022.02.12 |
[SQL] 문자 함수 (0) | 2022.02.11 |
[SQL] 열 결합 시 문자 삽입하기(결합 연산자 '||') (0) | 2022.02.11 |