-- 문제1. staff들 중 first_name이 Georgi인 동명이인을 찾고 나이가 많은 사람 순으로 정렬하시오.
-- 출력 title, first_name, last_name, brith_date
select title, first_name, last_name, birth_date
from employees e
join titles t on e.emp_no = t.emp_no
where first_name = 'Georgi'
and title = 'staff'
order by birth_date;
-- 문제 2. 생일에 입사한 사람을 모두 조회하라
-- 출력예시 employees.*
select *
from employees
where month(birth_date) = month(hire_date)
and day(birth_date) = day(hire_date);
-- 문제 3. 재직중이고 현재 연봉이 100000 이상인 직원수가 가장 많은 3개 부서를 출력하세요(부서, 고소득직원수)
select dept_name, count(*)
from departments d
join dept_emp de on d.dept_no = de.dept_no
join salaries s on s.emp_no = de.emp_no
where salary > 10000
group by d.dept_no
limit 3;
-- 문제 4. 승진을 2회 이상 하여 3개 이상의 직급을 지닌 이력이 있는 사람의 승진 날짜를 모두 출력하라
-- 출력 예시 last_name, title, from_date
select last_name, title, from_date
from titles t
join employees e on e.emp_no = t.emp_no
where t.emp_no in(select emp_no from titles group by emp_no having count(*) >= 3);
-- 문제 5. 부서 이동이 있었던 사원의 사번, 부서번호, 성, 이름, 이동 전,후 부서의 소속 기간을 출력하시오.
select de.emp_no, dept_no, last_name, first_name, to_date, from_date
from dept_emp de
join employees e on e.emp_no = de.emp_no
where de.emp_no in(
select emp_no
from dept_emp
group by emp_no
having count(*) > 1
);
-- 문제 6. 퇴사 이력(dept_emp의 to_date가 9999-01-01이 아니고 부서이동한것도 아닌 경우)을 조회하여 퇴사 날짜를 내림차순으로 정렬
select *
from dept_emp
where emp_no in (
select emp_no
from dept_emp
group by emp_no
having count(*) = 1)
and to_date != '9999-01-01'
order by to_date desc;
-- 문제 7. 재직중인 senior Engineer 들의 부서와 first_name 그리고 가장 최근 연봉을 출력하세요
select title, dept_name, first_name, salary
from employees e
join titles t on e.emp_no = t.emp_no
join salaries s on e.emp_no = s.emp_no
join dept_emp de on e.emp_no = de.emp_no
join departments d on de.dept_no = d.dept_no
where title = 'Senior Engineer'
and s.to_date = '9999-01-01';
-- 문제 8. 평균 연봉이 가장 높은 부서의 최상위 평균 연봉 10명만 조회하라 내림차순
-- 출력 예시 first_name, 평균연봉, 부서명
select first_name, round(avg(salary)) as avg, dept_name
from employees e
join salaries s on e.emp_no = s.emp_no
join dept_emp de on de.emp_no = e.emp_no
join departments d on d.dept_no = de.dept_no
join (
select dept_no, avg(salary) as avg
from salaries s
join dept_emp de on de.emp_no = s.emp_no
group by dept_no
order by avg desc
limit 1) as x on de.dept_no = x.dept_no
group by s.emp_no
order by avg desc
limit 10;
-- 문제 9. 남자 최고 연봉, 여자 최고 연봉을 구하라
select gender, max(salary)
from salaries s
join employees e on s.emp_no = e.emp_no
group by gender;
-- 문제 10. 각 직급별 최고 연봉을 구하라
select title, max(salary)
from salaries s
join titles t on s.emp_no = t.emp_no
group by title;
'MySQL > 1일 1쿼리' 카테고리의 다른 글
1일 1쿼리 - 6 (1) | 2024.06.13 |
---|---|
1일 1쿼리 - 5 (0) | 2024.06.12 |
1일 1쿼리 - 3 (0) | 2024.06.10 |
1일 1쿼리 - 2 (0) | 2024.06.07 |
1일 1쿼리 - 1 (1) | 2024.06.05 |