[DB] SQL문제2
- DB
- 2017. 11. 14. 16:54
1. 오늘부터 12월 25일까지 몇일이 남았는가?
select to_date('2017/12/25') - sysdate from dual;
2. 현재까지 근무한 직원들의 근무일수를 몇주 몇일로 조회(단, 근무일수가 많은 사람 순으로 조회)
select ename, hiredate, trunc((sysdate-hiredate)/7)"몇주", trunc(mod((sysdate-hiredate),7)) "몇일"from emp order by sysdate - hiredate desc;
3. 10번 부서 직원들 중 현재까지의 근무월수를 계산해서 조회
select deptno, ename, hiredate, sysdate, trunc(months_between(sysdate, hiredate))"근무개월수" from emp where deptno=10;
4. 20번 부서 직원들 중 입사일자로부터 13개월이 지난 후의 날짜를 조회
select deptno, ename, hiredate, add_months(hiredate,13)"입사일자부터 13개월 지난 후" from emp where deptno=20;
5. 모든 직원에 대해 입사한 달의 근무일수를 조회
select empno, ename, hiredate, last_day(hiredate) - hiredate "근무일수" from emp;
6. 현재 급여에 15%가 증가된 급여를 계산하여 사번, 이름, 급여, 증가된 급여를 조회
(단, 급여는 반올림하여 적용한다.)
select empno, ename, sal, round(sal*1.15)"증가된급여" from emp;
7. 이름, 입사일, 입사일로부터 현재까지의 월수, 급여, 급여 총계를 조회
select ename, hiredate, trunc(months_between(sysdate,hiredate))"입사후 현재까지 개월수", sal, sal*trunc(months_between(sysdate,hiredate))"급여 총계" from emp;
8. 업무가 analyst이면 급여를 10% 증가시키고 clerk이면 15%, manager이면 20%증가 시켜서 이름, 업무, 급여, 증가된 급여를 조회
select ename, job, sal, decode(job, 'ANALYST', sal*1.1, 'CLERK', sal*1.15, 'MANAGER', sal*1.2)"증가된 급여" from emp;
9. 이름의 첫글자가 k보다 크고 y보다 작은 직원의 이름, 부서, 업무를 조회하시오.
select ename, deptno, job from emp where ename>'K%' and ename<'Y%';
select ename, deptno, job from emp where substr(ename,1,1)>'K' and substr(ename,1,1)<'Y';
10. 부서별로 급여평균, 최고급여를 조회하는데, 단 급여평균이 높은 순으로 조회하고 급여평균이 2000이상인 부서만 조회
select avg(sal), max(sal) from emp group by deptno having avg(sal)>2000 order by avg(sal) desc;
11. 인원수, 보너스에 null이 아닌 인원수, 보너스의 평균(보너스가 null이아닌 평균, null을 포함한 평균),
등록되어 있는 부서의 수(중복 제외)를 구하여 조회
EX)
인원수 보너스받는 인원(null제외) 보너스 평균(null 포함) 보너스 평균(null 제외) 부서의 수
--------- ------------------------------ ---------------------- ------------------------ ---------
14 4 550 157.142857 3
select count(distinct(deptno))부서수, count(*)인원수, count(comm)보너스받는인원, avg(comm)보너스평균, avg(nvl(comm,0))보너스안받는사람평균 from emp;
12. 부서 인원이 4명보다 많은 부서의 부서번호, 인원 수, 급여의 합을 조회
select deptno, count(empno), sum(sal) from emp having count(deptno)>4 group by deptno ;
13. 최고급여와 최소급여의 차이는 얼마인가?
select max(sal), min(sal), max(sal)-min(sal)"차이" from emp;
14. 예시)
년도 count min max avg sum
-------------------------------------------------------------------------
80 1 800 800 800 800
81 10 950 5000 2282.5 22825
82 2 1300 3000 2150 4300
83 1 1100 1100 1100 1100
select to_char(hiredate,'YY')년도,
count(empno)count,
min(sal)min,
max(sal)max,
avg(sal)avg,
sum(sal)sum from emp
group by to_char(hiredate,'YY') order by to_char(hiredate,'YY');
15. 예시)
Total 1980 1981 1982 1983
---------------------------------------------
14 1 10 2 1
select count(empno) "Total",
count(decode(to_char(hiredate,'YYYY'), 1980,empno))"1980",
count(decode(to_char(hiredate,'YYYY'), 1981,empno))"1981",
count(decode(to_char(hiredate,'YYYY'), 1982,empno))"1982",
count(decode(to_char(hiredate,'YYYY'), 1987,empno))"1987"
from emp;
16. 예시)
업무 10 20 30 Total
-------------------------------------------------------------------------------
ANALYST 6000 6000
CLERK 1300 1900 950 4150
MANAGER 2450 2975 2850 8275
PRESIDENT 5000 5000
SALESMAN 5600 5600
select job"업무",
sum(decode(deptno,10,sal))"10",
sum(decode(deptno,20,sal))"20",
sum(decode(deptno,30,sal))"30",
sum(sal)Total from emp group by job order by job;
'DB' 카테고리의 다른 글
[DB] Sub Query (0) | 2017.11.15 |
---|---|
[DB] DML (0) | 2017.11.15 |
[DB] SQL 문제 (0) | 2017.11.13 |
[DB] Function (0) | 2017.11.13 |
[DB] SQL - 확장 문법 (0) | 2017.11.13 |