# 문제 : 부서 번호에 따라 월급을 다르게 인상하기
select deptno, empno, sal,
decode(deptno, 10, sal*1.1, 20, sal*1.2, sal)
as upsal
from emp;
-- using decode function
select deptno, empno, sal,
case deptno
when 10 then sal*1.1
when 20 then sal*1.2
else sal
end as upsal
from emp;
-- using simple case
select deptno, empno, sal,
case when deptno=10 then sal*1.1
when deptno=20 then sal*1.2
else sal
end as upsal
from emp;
-- using searched case
# Decode + Sum 예제
: 부서별 급여의 합을 이렇게 나타내세요.
TOTAL D10 D20 D30
---------- ---------- ---------- ----------
29025 8750 10875 9400
select deptno, sal, sal, sal, sal
from emp
order by deptno;
select deptno, sal, decode(deptno, 10, sal), sal, sal
from emp
order by deptno;
select deptno, sal, decode(deptno, 10, sal) as d10,
decode(deptno, 20, sal) as d20,
decode(deptno, 30, sal) as d30
from emp
order by deptno;
-- 각 부서별로 sal이 출력됨
DEPTNO SAL D10 D20 D30
------ ---------- ---------- ---------- ----------
10 2450 2450
10 5000 5000
10 1300 1300
20 2975 2975
20 3000 3000
20 1100 1100
20 800 800
20 3000 3000
30 1250 1250
30 1500 1500
30 1600 1600
30 950 950
30 2850 2850
30 1250 1250
select sum(sal) as total,
sum(decode(deptno, 10, sal)) as d10,
sum(decode(deptno, 20, sal))as d20,
sum(decode(deptno, 30, sal)) as d30
from emp;
-- 위에 출력된 sal을 sum함. 원하는 결과가 나옴.
# Decode + Count 예제 : 부서별 직업별 인원수를 이렇게(매
트릭스 형태) 나타내세요.
JOB D10 D20 D30
--------- ---------- ---------- ----------
ANALYST 0 2 0
CLERK 1 2 1
MANAGER 1 1 1
PRESIDENT 1 0 0
SALESMAN 0 0 4
select empno, ename, job, deptno, deptno, deptno
from emp
order by 4;
select empno, ename, job, deptno, decode(deptno, 10,
deptno) as d10, deptno, deptno
from emp
order by 4;
select empno, ename, job, deptno,
decode(deptno, 10, deptno) as d10,
decode(deptno, 20, deptno) as d20,
decode(deptno, 30, deptno) as d30
from emp
order by 4;
select empno, ename, job, deptno,
decode(deptno, 10, deptno) as d10,
decode(deptno, 20, deptno) as d20,
decode(deptno, 30, deptno) as d30
from emp
order by 4;
-- deptno별로 출력 됨
DEPTNO D10 D20 D30
------ ---------- ---------- ----------
10 10
10 10
10 10
20 20
20 20
20 20
20 20
20 20
30 30
30 30
30 30
30 30
30 30
30 30
select job,
count(decode(deptno, 10, deptno)) as d10,
count(decode(deptno, 20, deptno)) as d20,
count(decode(deptno, 30, deptno)) as d30
from emp
group by job
order by job;
-- 위 결과에서 부서별로 출력된 애들만 count함
댓글 없음:
댓글 쓰기