• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 일본어 (0)
        • 모모타로TMC (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [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' 카테고리의 다른 글

        [MySQL] 27. 연습 문제: GROUP BY/HAVING 절 활용하기  (0) 2024.06.10
        [MySQL] 26. GROUP BY와 HAVING 절  (0) 2024.06.10
        [MySQL] 25. 예제 코드: 논리 및 조건 함수  (0) 2024.06.07
        [MySQL] 24. 예제 코드: Function, decimal 이해하기  (0) 2024.06.07
        [MySQL] 23. SQL Function  (0) 2024.06.07
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바