- [MySQL] 1일 1쿼리 (3) : 함수 응용하기2024년 06월 07일
- Song hyun
- 작성자
- 2024.06.07.:02
728x90반응형[MySQL] 1일 1쿼리 (3) : 함수 응용해보기
1. 문제
2. 풀이 (답안)
1. 문제
순서 문제 1 40 년차 이상인 직원들 명예 퇴직을 위해 조회하시오 2 급여가 1500000 이 넘는 인원중 아직 재직중인 인원의 이름을 찾아내시오 3 성별이 여자인 직원의 last_name 뒤에 2글자만 뽑아보시오 4 년차가 20년차 이상인 직원들의 년차별 월급 평균을 구하시오 5 현재 근무중인 근로자들의 직급(title)별 평균연봉을 나타내세요.
직급, 평균연봉(소수점 제외) 로 표시6 마케팅부 30년차 근로자들 중 연봉이 80000 이상이면 O 아니면 X로 표기하세요.
이름(first_name + last_name), 년차, 연봉, 체크(O,X) 로 표시7 직원들의 성(last_name)을 모두 대문자로 바꾸고, 이름 앞에 Mr/Ms를 붙여보자. 8 39년차 이상의 직원들의 목록을 (이름+성)의 형태로 출력해보자. 9 매니저들의 최고 급여를 추출하세요. 10 퇴사자와 재직자를 구분 하며 퇴사자의 경우 재지년수를 출력하세요(출력예시 = first_name, last_name, 근무상태(재직중 or 퇴사자경우 근무연수)) 11 부서별 인원과 그 부서별 평균 급여를 출력하세요. 12 salaries테이블의 salary(연봉)을 월급으로 나누고(환율1365) -- dept_name, dept_no, emp_no, from_date,to_date 조회하시오(조인필요) -- 단 (from,to _date)는 salary의 테이블, 월급은 1,000,000 이상부터 나머지는 테이블 관계 X 13 직원의 이름, 근무연수, 부서를 출력하시오. -- 단 , 직원의 이름은 퍼스트네임, 라스트네임을 합쳐쳐서 표에 나타내고 근무연수는 35년 이상 직원의 직원들만 포함시키시오. 14 아파트 이름과 그 아파트에 현재사는 사람을 출력하세요 15 first_name의 두 번째 알파벳이 a인 직원의 평균연봉을 구하세요. 16 각 부서별 직원의 수와 평균 연봉을 구하세요. -- 표시 예시(title, '직원수' ,avg) 17 회사 CEO가 근속 20년이 넘은 직원들을 대상으로 14일의 안식 휴가와 감사패를 지급하기로 결정했습니다. 해당하는 직원들의 근속 년수와 풀네임을(한 컬럼) 출력하시오. 18 재직 중인 사람의 이름과 년차수를 출력 하세요 2. 풀이 (답안)
더보기2024.06.07 목요일 1일 1쿼리 1. 40 년차 이상인 직원들 명예 퇴직을 위해 조회하시오 select*from employees; select first_name, hire_date, year(Current_date)-year(hire_date)+1 as '연차' from employees where (year(Current_date)-year(hire_date)+1)>39; 2. 급여가 1500000 이 넘는 인원중 아직 재직중인 인원의 이름을 찾아내시오 select e.first_name, e.emp_no,s.salary from employees as e left join salaries as s on e.emp_no = s.emp_no where salary > 150000 and to_date = '9999-1-01'; 3. 성별이 여자인 직원의 last_name 뒤에 2글자만 뽑아보시오 select right(last_name,2) as '이름' , gender from employees where gender = 'F'; 4. 년차가 20년차 이상인 직원들의 년차별 월급 평균을 구하시오 select avg(salary) , from_date, current_date from salaries where (year(current_date) - year(from_date)) > 20 group by (year(current_date) - year(from_date)); 5. 현재 근무중인 근로자들의 직급(title)별 평균연봉을 나타내세요. 직급, 평균연봉(소수점 제외) 로 표시 select t.title as '직급', cast(avg(s.salary)as decimal(6)) as '평균연봉' from titles as t left join salaries as s on t.emp_no = s.emp_no where s.to_date = '9999-01-01' and t.to_date = '9999-01-01' group by t.title; 6. 마케팅부 30년차 근로자들 중 연봉이 80000 이상이면 O 아니면 X로 표기하세요. 이름(first_name + last_name), 년차, 연봉, 체크(O,X) 로 표시 select concat(e.first_name,' ',e.last_name) as '이름', (year(current_date())-year(e.hire_date))+1 as '년차', s.salary as '연봉', case when s.salary >= 80000 then 'O' else 'X' end as '체크' from employees as e left join salaries as s on e.emp_no = s.emp_no join dept_emp as d on e.emp_no = d.emp_no where d.dept_no = 'd001' and d.to_date = '9999-01-01' and s.to_date = '9999-01-01' and ((year(current_date())-year(e.hire_date))+1) = 30; 7. 직원들의 성(last_name)을 모두 대문자로 바꾸고, 이름 앞에 Mr/Ms를 붙여보자. select concat('Mr/Ms ',upper(last_name)) as '이름' from employees; 8. 39년차 이상의 직원들의 목록을 (이름+성)의 형태로 출력해보자. select emp_no,concat(first_name," ",last_name) as '이름' from employees where (year(current_date)-year(hire_date)+1)>39; 9.-- 매니저들의 최고 급여를 추출하세요. select em.emp_no, dp.dept_name ,em.first_name, Max(salary) from dept_emp as de join employees as em on de.emp_no = em.emp_no join salaries as sa on sa.emp_no = de.emp_no join departments as dp on de.dept_no = dp.dept_no join dept_manager as dem on dem.emp_no = de.emp_no where dem.to_date = '9999-01-01' group by de.emp_no; 10. 퇴사자와 재직자를 구분 하며 퇴사자의 경우 재지년수를 출력하세요 (출력예시 = first_name, last_name, 근무상태(재직중 or 퇴사자경우 근무연수)) select emp.first_name,emp.last_name, case when to_date != '9999-01-01' then (year(current_date())-year(to_date)) else '재직중' end as '근무연속' from dept_emp as dep_e join employees as emp on dep_e.emp_no = emp.emp_no; 11. 부서별 인원과 그 부서별 평균 급여를 출력하세요. select d.dept_name, count(de.emp_no) as '직원수', avg(s.salary) from employees as e left join dept_emp as de on e.emp_no = de.emp_no left join departments as d on d.dept_no = de.dept_no left join salaries as s on s.emp_no = e.emp_no group by d.dept_name; 12. salaries테이블의 salary(연봉)을 월급으로 나누고(환율1365) -- dept_name, dept_no, emp_no, from_date,to_date 조회하시오(조인필요) -- 단 (from,to _date)는 salary의 테이블, 월급은 1,000,000 이상부터 나머지는 테이블 관계 X select s.emp_no,substring((s.salary/121365),1,10) as '월급(년)', de.dept_no,de.dept_name,s.from_date,s.to_date from salaries as s left join dept_emp as e on s.emp_no=e.emp_no inner join departments as de on e.dept_no=de.dept_no where substring((s.salary/121365),1,10)>1000000; 13. 직원의 이름, 근무연수, 부서를 출력하시오. -- 단 , 직원의 이름은 퍼스트네임, 라스트네임을 합쳐쳐서 표에 나타내고 근무연수는 35년 이상 직원의 직원들만 포함시키시오. select concat(e.first_name, ' ', e.last_name) as '이름', (year(current_date) - year(hire_date)) as '근속연차', dm.dept_name as '부서' from employees as e left join dept_emp as d on e.emp_no = d.emp_no left join departments as dm on d.dept_no = dm.dept_no where (year(current_date) - year(hire_date) >= 35); 14. 아파트 이름과 그 아파트에 현재사는 사람을 출력하세요 select dept_name,employees.first_name,employees.last_name from departments inner join dept_emp on dept_emp.dept_no = departments.dept_no inner join employees on dept_emp.emp_no = employees.emp_no where year(dept_emp.to_date) - (year(current_date()) >=0) group by dept_emp.dept_no; 15. first_name의 두 번째 알파벳이 a인 직원의 평균연봉을 구하세요. select e.first_name, avg(s.salary) as '평균연봉' from employees e join salaries s on e.emp_no = s.emp_no where substring(e.first_name, 2, 1) = 'a' group by e.first_name; 16. 각 부서별 직원의 수와 평균 연봉을 구하세요. -- 표시 예시(title, '직원수' ,avg) select t.title, count(s.emp_no) as '직원수', avg(salary) as avg from salaries as s join titles as t on s.emp_no = t.emp_no and s.to_date = t.to_date group by t.title; 17. 회사 CEO가 근속 20년이 넘은 직원들을 대상으로 14일의 안식 휴가와 감사패를 지급하기로 결정했습니다. 해당하는 직원들의 근속 년수와 풀네임을(한 컬럼) 출력하시오. select concat(first_name, ' ', last_name) as '대상자', year(current_date) - year(hire_date) as 근속년수 from employees where year(current_date) - year(hire_date) >= 20; 18. 재직 중인 사람의 이름과 년차수를 출력 하세요 select em.first_name, em.last_name, year(current_date) - year(em.hire_date) as '년차' from employees as em join dept_emp as de on em.emp_no = de.emp_no where de.to_date = '9999-01-01';
728x90반응형'MySQL > 1일 1쿼리' 카테고리의 다른 글
[MySQL] 1일 1쿼리 (6) : 서브 쿼리 및 기본 개념 활용 (0) 2024.06.12 [MySQL] 1일 1쿼리 (5) : Self join 및 기존 개념 복습 (0) 2024.06.11 [MySQL] 1일 1쿼리 (4): HAVING과 GROUP BY 절 (0) 2024.06.11 [MySQL] 1일 1쿼리 (2) : JOIN 활용하기 (0) 2024.06.05 [MySQL] 1일 1쿼리 (1) : 영화 평점표 만들기 (0) 2024.06.04 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)