본문 바로가기

콩's EDUCATION/콩's DATABASE

SQL 문제 3차

1. 각 부서(department_id)별로 최고 연봉(salary)를 받는 사원의 사번(employee_id), 성(last_name)과 연봉(salary)을 조회하시오. 단 조회결과는 연봉의 내림차순으로 정렬되어 나타나야 합니다.


select e.employee_id, 

e.last_name, e.salary

from employees e

where (e.department_id, e.salary) 

in (select department_id, max(salary) 

   from employees group by department_id)

order by salary desc;


2. 각 업무(job) 별로 연봉(salary)의 총합을 구하고자 한다. 

연봉 총합이 가장 높은 업무부터 업무명(job_title)과 연봉 총합을 조회하시오.


select j.job_title, sum(e.salary)

from employees e, jobs j

where e.job_id = j.job_id

group by j.job_title

order by sum(salary) desc;


3. 각 사원(employee)에 대해서 사번(employee_id), 이름(first_name), 부서명(department_name), 매니저(manager)의 이름(first_name)을 조회하시오.


select e.employee_id, e.first_name, e.department_name, m.first_name 

from emp_details_view e, emp_details_view m 

where e.manager_id=m.employee_id;


4. 자신의 매니저보다 채용일(hire_date)이 빠른 사원의 사번(employee_id), 성(last_name)과 채용일(hire_date)을 조회하라. 단 날짜 포맷과 ALIAS를 적용한다.


 select e.employee_id, e.last_name, to_char(e.hire_date, 'YYYY"년"FMMM"월"DD"일"') 입사일

 from employees e, employees m

 where (e.manager_id=m.employee_id and e.hire_date < m.hire_date)


5. 자신의 부서 평균 급여보다 연봉이 많은 사원의 사번(employee_id), 성(last_name)과 연봉(salary)을 조회하라.


select employee_id, last_name, salary

from employees e

where salary > (select avg(salary)

            from employees

          where department_id=e.department_id);


6. 직종(JOB)별 최고 급여를 급여가 많은 직종부터 출력하시오. 

단, 직원이 2명 이상인 직종만 조회한다. 


select job_id, max(salary) from employees

group by job_id

having count(employee_id) >= 2

order by max(salary) desc;


7. 각 도시(city)에 있는 모든 부서 직원들의 평균급여를 조회하고자 한다. 

평균급여가 가장 높은 도시부터 도시명(city)과 평균연봉을 출력하시오. 

단, 도시에 근무하는 직원이 10명 이하인 곳은 제외하고 조회한다.


select city, avg(salary)

from emp_details_view

group by city

having count(employee_id) > =11

order by avg(salary) desc;


8. 사번(empno)이 7934인 사원보다 연봉(sal)이 높고 직종(job)이 SALESMAN인 사원의 사번과 이름과 연봉을 조회한다. 

단, 연봉이 낮은 순서로 출력한다. 


SELECT empno, ename, sal 

FROM emp

WHERE sal > (SELECT sal

             FROM emp

             WHERE empno = 7934)

and job = 'SALESMAN';


9. 연봉등급(GRADE)이 4등급인 사원들의 사원번호(EMPNO), 사원명(ENAME), 연봉(SAL), 연봉등급(GRADE)을 조회한다. 

연봉이 낮은 순서로 정렬하고, 연봉이 같은 경우에는 사원번호가 낮은 순서로 정렬한다.


SELECT empno, ename, sal, g.grade 

FROM (SELECT * FROM emp order by empno desc) e, salgrade g

WHERE g.grade = 4

order by sal;


10. 자신의 매니저(MGR)와 동일한 부서에 근무하는 사원들의 사원번호(EMPNO), 사원명(ENAME), 부서번호(DEPTNO)를 조회한다. 단, 사원번호가 낮은 순서로 정렬한다.

(레코드 없을 수도 있습니다)


SELECT e.empno, e.ename, e.deptno

FROM emp e, emp e2

WHERE e.mgr = e2.empno and e.deptno = e2.deptno

ORDER BY 1 desc;


11. 부서지역명(LOC)이 "DALLAS"인 부서에 근무하면서 직종(JOB)이 "CLERK"인 사원들의 사원번호, 이름, 연봉을 조회한다.  단, 사원번호가 낮은 순서로 정렬한다.


SELECT empno, ename, sal

FROM emp e, dept d

WHERE e.deptno = d.deptno and loc = 'DALLAS' and job = 'CLERK';


12. 부서지역명(LOC)이 'DALLAS' 또는 'CHICAGO'인 부서에 근무하면서 연봉이 1400이상인 사원들의 연봉(SAL) 평균을 조회한다.


SELECT empno, ename, avg(sal)

FROM emp e, dept d

WHERE e.deptno = d.deptno

and loc = 'DALLAS' or loc = 'CHICAGO'

and sal > 1400

GROUP BY empno, ename;