티스토리 뷰

Oracle SQL

SQL 문제 8-9일차

JaeGuin 2021. 8. 22. 17:29

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
댓글