티스토리 뷰
8일차
1. 사원 테이블에서 직업(JOB) 별로 사원수와 처음 고용(HIREDATE)된 사원에 고용일자를 아래 예제처럼 출력하세요?
ex)
select job,
count(job) as cnt,
min(to_char(hiredate, 'YYYY/MM/DD HH24:MI:SS')) as first_hiredate
from emp
group by job
order by job asc;
2. 사원 테이블에서 고용일자(HIREDATE)를 년월 별로 사원수를 아래 예제처럼 출력하세요?
ex)
select to_char(hiredate,'YYYY-MM') as hiredate,
count(to_char(hiredate,'YYYY-MM')) as cnt
from emp
group by to_char(hiredate,'YYYY-MM')
order by hiredate asc;
3. 사원 테이블에서 고용일자(HIREDATE)를 년월 별로 사원수가 2명 이상만 아래 예제처럼 출력하세요?
ex)
select hiredate, cnt
from(select to_char(hiredate,'YYYY-MM') as hiredate,
count(to_char(hiredate,'YYYY-MM')) as cnt
from emp
group by to_char(hiredate,'YYYY-MM')
)
where cnt>=2
order by hiredate asc;
4. 부서별 인원수와 급여 합을 아래 예제처럼 출력하세요?
ex) 부서가 없는 사원 DNAME 정보는 ‘NO DEPT’ 로 출력
select NVL(d.dname, 'NO DEPT')as dname,
count(*) as cnt,
sum(sal) as sal
from emp e, dept d
where e.deptno = d.deptno(+)
group by dname
order by d.dname nulls last;
5. 사원 테이블에서 고용일자(HIREDATE)를 년도와 상관없이 월별로 사원수를 아래 예제처럼 출력하세요?
ex) 고용된 월이 없어도 사원수를 0으로 출력
SELECT B.MM, NVL(SUM(A.CNT), 0) CNT
FROM (SELECT TO_CHAR(HIREDATE, 'MM') HIREDATE, COUNT(*) CNT
FROM EMP
GROUP BY HIREDATE) A,
(SELECT ROWNUM MM
FROM EMP
WHERE ROWNUM <= 12) B
WHERE B.MM = A.HIREDATE(+)
GROUP BY B.MM
ORDER BY B.MM;
9일차
9 일차 SQL 과제 –
1. 사원 테이블에서 부서번호(DEPTNO), 직업(JOB) 별로 급여 소계, 합계를 아래 예제처럼 출력하세요?
ex) 부서 없는 사원은 제외 (ROLLUP 구문 사용)
select deptno, job, sum(sal) as sum_sal
from emp
where deptno is not null
group by rollup (deptno, job);
2. 사원 테이블에서 부서번호(DEPTNO), 직업(JOB) 별로 급여 소계, 합계를 아래 예제처럼 출력하세요?
ex) 부서 없는 사원은 제외 (CUBE 구문 사용)
select deptno, job, sum(sal) as sum_sal
from emp
where deptno is not null
group by cube (deptno, job);
3. 부서명(DNAME), 직업(JOB) 별로 급여 소계, 합계를 명시하여 아래 예제처럼 출력하세요?
ex) 부서 없는 사원은 제외 (ROLLUP 구문 사용)
select
case grouping(dname) when 1 then 'all departments' else dname end as dname,
case grouping(job) when 1 then '소계' else job end as job,
sum(sal) sum_sal
from emp, dept
where dept.deptno = emp.deptno
group by dname, rollup(job)
union all
select '합계' dname, ' ' job, sum(sal) sum_sal
from emp a, dept b
where a.deptno = b.deptno;
4. 부서명(DNAME), 직업(JOB) 별로 급여 소계, 합계를 명시하고 부서명은 상위 하나만 보여주고 급여는 금액(천단위 ,) 단위로 아래 예제처럼 출력하세요?
ex) 부서 없는 사원은 제외 (ROLLUP 구문 사용)
select
case when q.rank=1 then q.dname else ' ' end as dname,q.job,q.sum_sal
from( select dname, case grouping(job) when 1 then '소계' else job end as job ,sum(sal) sum_sal,
rank() over ( partition by dname order by job) as rank
from emp, dept
where dept.deptno = emp.deptno
group by dname, rollup(job))q
union all
(select '합계' dname, ' ' job, sum(sal) sum_sal
from emp a, dept b
where a.deptno = b.deptno);
5. 부서명(DNAME), 직업(JOB) 별로 급여 소계, 합계를 명시하고 부서명은 상위 하나만 보여주고 급여는 금액(천단위 ,) 단위로 아래 예제처럼 출력하고 단 부서명, 직업별로 급여가 1000 이상인 데이터만 출력하세요?
ex) 부서 없는 사원은 제외 (ROLLUP 구문 사용)
select
case when q.rank=1 then q.dname else ' ' end as dname,q.job,q.sum_sal
from( select dname, case grouping(job) when 1 then '소계' else job end as job ,sum(sal) sum_sal,
rank() over ( partition by dname order by job) as rank
from emp, dept
where dept.deptno = emp.deptno and sal >1000
group by dname, rollup(job))q
union all
(select '합계' dname, ' ' job, sum(sal) sum_sal
from emp a, dept b
where a.deptno = b.deptno and sal >1000 );
'Oracle SQL' 카테고리의 다른 글
SQL 문제 10-11일차 (0) | 2021.09.29 |
---|---|
SQL 문제 6-7일차 (0) | 2021.08.22 |
SQL 문제 4-5일차 (0) | 2021.08.22 |
SQL 문제 1-3일차 (0) | 2021.08.10 |
Oracle DB SCOTT 생성 (SCOTT/TIGER) (0) | 2021.08.10 |
- Total
- Today
- Yesterday