------------------------------
일반 함수
------------------------------
# 문제 : 홀수, 짝수 표현하기
-- decode함수
-- 엑셀의 if함수처럼 쓰인다.
-- decode([컬럼명], a1, a2, a3)
: 컬럼의 값 a1이면 a2를 출력, 아니면 a3을 출력
-- decode([컬럼명], a1, a2, a3, a4)
: 컬럼의 값 a1이면 a2를 출력, a3이면 a4를 출력, ...
이런식으로 계속 나감. 몇개까지 가능하지?
select empno, mod(empno, 2), decode(mod(empno, 2), 0, '짝수', '홀수') as ret --> decode 함수
from emp;
--empno를 2로 나눈 나머지를 리턴
--리턴된 값이 0이면 '짝수', 아니면 '홀수'를 리턴
--column alias를 왜 ret이라고 했지?
select empno, mod(empno, 2), case mod(empno, 2) when 0 then '짝수' --> simple case 표현식
else '홀수'
end as ret
from emp;
-- case문을 사용, case [컬럼명] when [value1] then [value2]
else [value3]
end
-- 의 형태
-- mod함수에서 리턴된 값이, 0일때 '짝수', 아니면 '홀수'
-- case함수 종료, column alias부여함
select empno, mod(empno, 2), case when mod(empno, 2) = 0 then '짝수' --> searched case 표현식
else '홀수'
end as ret
from emp;
# 문제 : 월급에 따라 다르게 표현하기
sal < 2000 이면, Low 출력
sal >= 2000 and sal < 4000 이면, Mid 출력
sal >= 4000 이면, High 출력
select empno, ename, sal, decode(trunc(sal/2000), 0, 'Low', 1, 'Mid', 'High') as gubun
from emp
order by sal;
select empno, ename, sal, case trunc(sal/2000) when 0 then 'Low'
when 1 then 'Mid'
else 'High'
end as gubun
from emp
order by sal;
-- sal/2000의 소수점을 버린 값이 0이면 'Low',
-- 1이면 'Mid', 0도 1도 아니면 'High'를 출력
-- 2000으로 나눈 나머지가 0이면 2000보다 작다는 의미
-- 2000으로 나눈 나머지가 1이면 2000보다 크다는 의미
-- 2000으로 나눈 나머지가 2이상 4000보다 크다는 의미
-- 즉 "작다", "중간이다", "크다" 의 의미로 사용되었다.
select empno, ename, sal, case when sal < 2000 then 'Low'
when sal >= 2000 and sal < 4000 then 'Mid'
when sal >= 4000 then 'High'
end as gubun
from emp
order by sal;
--위의 trunck(sal/2000)을 이용한 것과 결과가 같음
댓글 없음:
댓글 쓰기