[DataBase]3장_실습 문제

존진·2023년 10월 19일

✅ 1, 2번 문제는 2장 내용

1. 사원의 직급(JOB) 이 CLERK 이면 sal 의 10%, SALESMAN 이면 sal 의 20%, 아니면 sal의 30%를 보너스로 지급할 예정이다. 사원의 사원번호, 이름, 직급(JOB), 월급, 보너스를 출력하시오.(단, DECODE 구문을 사용하시오.)

SELECT empno, ename, job, sal,
    DECODE(job,'CLERK',sal*0.10,
                'SALESMAN',sal*0.20,sal*0.30) "보너스"
FROM emp;


2. 사원의 월급이 1000 미만이면 50%, 1000이상 2000 미만이면 20%, 그 이상이면 10%를 보너스로 지급하고자 한다. 사원번호, 사원이름, 월급, 보너스를 출력하시오.

SELECT empno, ename, sal, 
        case
            WHEN sal<1000 THEN sal*0.50
            WHEN sal>=1000 AND sal<2000 THEN sal*0.20
            ELSE sal*0.10
            END "보너스"
FROM emp;


3. 10번 부서 월급의 평균, 최고, 최저, 인원수를 구하여 출력하라.

SELECT ROUND(AVG(sal),1), MAX(sal), MIN(sal), COUNT(*)
FROM emp
WHERE deptno=10;


4. 각 부서별 급여의 평균, 최고, 최저, 인원수를 구하여 출력하라.

SELECT deptno, ROUND(AVG(sal),1), MAX(sal), MIN(sal), COUNT(*)
FROM emp
GROUP BY deptno;


5. 각 부서 별 같은 업무를 하는 사람의 인원수를 구하여 부서 번호, 업무명, 인원수를 출력하라.

SELECT deptno, job, COUNT(*)
FROM emp
GROUP BY deptno, job;


6. 같은 업무를 하는 사람의 수가 4명 이상인 업무와 인원수를 출력하라.

SELECT job, COUNT(*) "인원수"
FROM emp
GROUP BY job
HAVING COUNT(*)>=4;


7. 사원들을 입사일 순서대로 가장 먼저 입사한 순서대로 순위를 매기시오.

SELECT hiredate, ename, RANK() OVER (ORDER BY hiredate ASC)
FROM emp;


8. 세 번째로 입사한 사원의 이름을 출력하시오.

SELECT *
FROM
(SELECT ename, hiredate, RANK() OVER (ORDER BY hiredate ASC) "RANK"
FROM emp)
WHERE RANK=3;


9. 81년 12월 27일에 입사한 사원이 있다고 가정하면 이 사원은 몇 번째로 입사한 사원이 되는가?

SELECT RANK('81/12/27') WITHIN GROUP(ORDER BY hiredate) "RANK"
FROM emp;


10. 사원들의 이름과 월급, 월급의 누계를 구하시오.

SELECT ename, sal, SUM(sal) OVER(ORDER BY sal) "월급누계"
FROM emp;


11. 학생 테이블에서 이름, 학과 번호(deptno1), 몸무게, 그리고 각 학과 번호 별로 몸무계의 누계를 계산하시오.

SELECT name, deptno1, weight,
        SUM(weight) OVER(PARTITION BY deptno1 ORDER BY weight) "누계"
FROM student;

0개의 댓글