본문으로 바로가기

DB-180305

category 프로그래밍/DB 2018. 3. 5. 22:47
 

절대값 쓸때는  ABS함수를 사용한다.

 SELECT ABS(1000 - 2590)

FROM DUAL;

 

https://blog.naver.com/operat723/220993517369

 

 

문제 1.

 

급여 순위 중 홀수번째에 해당하는 사원들의 급여를 10%감봉하여 전체 사원의 평균을 구하고 구한 평균 이상인 사람들의 급여를 20%감봉하여 전체 급여순위와 사원정보를 출력하시오.

 

 

SELECT B.ENAME, B.JOB,

            CASE WHEN A.AVV <= B.SAL

                THEN B.SAL * 0.8

                ELSE B.SAL

                END AS CH_SAL2,

        RANK() OVER (ORDER BY CASE WHEN A.AVV <= B.SAL

                THEN B.SAL * 0.8

                ELSE B.SAL

                END DESC)

FROM

(SELECT AVG(CH_SAL) AS AVV

    FROM        

        (SELECT RANK() OVER(ORDER BY SAL DESC) AS RANK,

                    CASE

                    WHEN MOD( RANK() OVER(ORDER BY SAL DESC), 2)  =1

                  THEN SAL *0.8

                  ELSE SAL

                  END AS CH_SAL

                  FROM EMP)) A

                  INNER JOIN EMP B ON 1=1

 ;

 

 

문제 2.

 

12월에 입사한 사원 중 급여 순위 2등의 급여보다 큰 사원들중 가장 많은 사원이 있는 업무를 구하시오.

 

 

SELECT *

FROM

(SELECT C.JOB, COUNT(C.JOB), RANK() OVER(ORDER BY COUNT(C.JOB) DESC) AS RNK

FROM

 (SELECT *

 FROM

 

 (SELECT ENAME,SAL,RANK() OVER(ORDER BY SAL DESC) AS RNK

 FROM EMP E INNER JOIN SALGRADE SG ON E.SAL  BETWEEN SG.LOSAL AND SG.HISAL

 WHERE TO_CHAR(HIREDATE, 'MM')= 12)A

 WHERE  A.RNK =2 ) B INNER JOIN EMP C ON 1=1

 WHERE C.SAL > B.SAL

 GROUP BY C.JOB)

 WHERE RNK = 1

 

 ;

 ;

 

문제 3.

 

DALLAS에 업무하는 사원들의 전체 급여 합과 그 사원들을 제외한 사원들의 급여 합을 구하여 두 차이를 구하고 구한 차이 이상의 급여를 받는 사원들의 급여를 구한차이만큼 감봉하여 전체 사원의 정보를 출력하시오.

 

SELECT F.SAL,F.ENAME, F.JOB, F.MGR,F.HIREDATE,F.SAL,F.COMM,F.DEPTNO,

                        CASE

                        WHEN F.SAL >= C.VAL

                        THEN F.SAL - C.VAL

                        ELSE F.SAL

                        END AS RESAL

FROM

(SELECT ABS(SUM(A.SUM_DALLAS) - SUM(B.N_DALLAS)) AS VAL

FROM

(SELECT SUM(E.SAL) AS SUM_DALLAS

FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO

WHERE D.LOC = 'DALLAS') A INNER JOIN

                                    (SELECT SUM(E.SAL) AS N_DALLAS

                                    FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO

                                    WHERE D.LOC != 'DALLAS') B ON 1=1)C INNER JOIN EMP F ON 1=1;

 

 

 

 

문제 4.

 

급여 등급이 2, 4등급인 사원들이 가장 많이 포함된 부서의 업무별 급여총계 순위를 출력하시오.

 

 

SELECT A.DEPTNO,E.JOB,SUM(E.SAL), RANK() OVER(PARTITION BY A.DEPTNO ORDER BY SUM(E.SAL) DESC) AS SUM_SAL

 FROM

 (SELECT DEPTNO

 FROM EMP

 WHERE JOB IN

        (SELECT JOB

        FROM

        (SELECT  JOB, COUNT(*), RANK() OVER(ORDER BY COUNT(*) DESC) AS RNK

         FROM EMP E INNER JOIN SALGRADE SG ON E.SAL BETWEEN SG.LOSAL AND SG.HISAL

         WHERE SG.GRADE IN (2,4)

         GROUP BY JOB

         )

         WHERE RNK =1

        )

)A INNER JOIN EMP E ON A.DEPTNO = E.DEPTNO

GROUP BY A.DEPTNO,E.JOB

 

 

 

문제 5.

 

KING 제외한 사원들의 급여 최대치와 최소치를 구하고 차이를 구하여 전체 급여 평균과의 차이를 구하시오.

 

SELECT MAX(SAL) - MIN(SAL) A

FROM EMP

WHERE ENAME != 'KING' ;

 

SELECT AVG(SAL) B

FROM EMP ;

 

SELECT A-B

FROM (SELECT MAX(SAL) - MIN(SAL) A

FROM EMP

WHERE ENAME != 'KING') C INNER JOIN (SELECT AVG(SAL) B FROM EMP)D ON 1=1 ;

 

 

'프로그래밍 > DB' 카테고리의 다른 글

DB-180307  (492) 2018.03.10
DB-180306  (496) 2018.03.10
DB-180302  (467) 2018.03.05
DB-180228  (491) 2018.03.02
DB-180227  (479) 2018.03.02