* CASE 구문 == switch
-- 방법1
SELECT employee_id, first_name, phone_number,
CASE SUBSTR(phone_number, 1, 3)
WHEN '515' THEN '서울'
WHEN '590' THEN '부산'
WHEN '650' THEN '광주'
ELSE '기타'
END as "지역"
FROM employees;
-- 방법2
SELECT employee_id, first_name, phone_number,
CASE
WHEN SUBSTR(phone_number, 1, 3) = '515' THEN '서울'
WHEN SUBSTR(phone_number, 1, 3) = '590' THEN '부산'
WHEN SUBSTR(phone_number, 1, 3) = '650' THEN '광주'
ELSE '기타'
END AS 지역
FROM employees;
- SUBSTR("문자열", "시작위치", "길이") : 문자열을 시작위치부터 길이만큼 자르는 함수
- CASE ~ END로 마무리, ALIAS 설정 가능(지역)
- WHEN 일 때, THEN으로 출력
* DECODE 함수
DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3..........)
SELECT employee_id, first_name, phone_number,
DECODE(SUBSTR(phone_number, 1, 3),
'515', '서울',
'590', '부산',
'650', '광주',
'기타'
) AS 지역
FROM employees;
- else로 쓰는 '기타'가 없으면 null로 출력된다
- 출력 결과는 위의 CASE구문과 같다.
* 분석 함수
- 순위 함수
RANK()
DENSE_RANK()
ROW_NUMBER()
ROWNUM(함수아님) -- 번호를 매겨줌
-- 급여 랭킹 TOP10을 구하라
SELECT ROWNUM, employee_id, first_name
FROM employees
WHERE ROWNUM <= 10;
- ROWNUM이 번호를 매겨주지만, employee_id 순서대로 줄 세운 것에 불과함
SELECT ROWNUM, employee_id, first_name
FROM employees
WHERE ROWNUM >= 11 AND ROWNUM <= 20;
- 게다가 두개의 조건이 들어갔을 땐 동작하지 않음
-- SUB QUERY를 사용하여 순위 구하기
1. 급여의 순위 → 정렬
2. 번호 지정 → ROWNUM
3. 범위 지정
SELECT RNUM, employee_id, first_name, salary
FROM
(SELECT ROWNUM AS RNUM, employee_id, first_name, salary -- 2. 번호 지정 (정렬된 부분에 번호를 매겨줌)
FROM
(SELECT employee_id, first_name, salary -- 1. 급여의 순위
FROM employees
ORDER BY salary DESC)
)
WHERE RNUM >= 1 AND RNUM <= 10; -- 3. 범위 지정
'Coding Note > SQL' 카테고리의 다른 글
SQL SUB QUERY 서브쿼리 예제 (0) | 2021.12.27 |
---|---|
SQL SUB QUERY 서브쿼리 / 단일 ROW, COLUMN / 다중 ROW, COLUMN (0) | 2021.12.27 |
SQL JOIN 예제 (INNER JOIN / SELF JOIN) (0) | 2021.12.27 |
SQL JOIN 알아보기 (inner join / full outer join / cross join / outer join / self join) (0) | 2021.12.27 |
SQL 예제 ORDER BY (정렬) / 표준함수 (UPPER, CONCAT, INSTR, MOD, TO_DATE, TRUNC, TO_CHAR) / GROUP BY (그룹핑) (0) | 2021.12.26 |
댓글