2010년 5월 27일 목요일

SQL공부 #7

  # 문제 : 부서 번호에 따라 월급을 다르게 인상하기

    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함

댓글 없음:

댓글 쓰기