• 티스토리 홈
  • 프로필사진
    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쿼리 (5) : Self join 및 기존 개념 복습
        2024년 06월 11일
        • Song hyun
        • 작성자
        • 2024.06.11.오후05:57
        728x90
        반응형

        [MySQL] 1일 1쿼리 (5) : Self join 및 기존 개념 복습

        1. 문제

        2. 문제 풀이


        1. 문제

        순서 문제
        1 재직중이고 현재 연봉이 100000 이상인 직원수가 가장 많은 3개 부서를 출력하세요
        -- 부서, 고소득직원수
        2 부서중 직원수가 가장 많은 부서 하나만 찾아주세요(부서이름과, 직원 수 나오게)
        3 재직 중인 사원들 중, 가장 오래 재직중인 직원 5명의 이름, 직함, 연봉을 출력하시오.
        4 Development 부서중 년차가 가장 높은 사람 5 명 출력해 퇴시키시오(재직중인인원중)
        5 현재 재직중인 사람들의 부서 이름,소수점없는 평균연봉을 구하시오
        6 부서 이동이 있었던 사원의 사번, 부서번호, 성, 이름, 이동 전,후 부서의 소속 기간을 출력하시오.
        7 생일에 입사한 사람을 모두 조회하라 -- 출력예시 employees.*
        8 낮은 번호대로 각 부서의 역대 매니저와 현 매니저의 수를 구하고 그 매니저들의 평균 급여를 구해라. -- 출력 예시 - 부서 번호, 부서 이름, 인원수, 평균 급여
        9 현직자 중 업종을 출력하고 업종별 임금 평균과 최대 임금을 출력하시오.
        10 각 직원(중복x)마다 부서와 직급을 구하라 (단, 오름차순,내림차순은 무시한다)
        11 재직중인 senior Engineer 들의 부서와 first_name 그리고 가장 최근 연봉을 출력하세요
        12 직급이 staff 인 직원의 평균 연봉을 구하세요
        13 staff들 중 first_name이 Georgi인 동명이인을 찾고 나이가 많은 사람 순으로 정렬하시오. (출력 : title, first_name, last_name, brith_date)
        14 연봉이 10만 달러 이상인 사람의 사번, 이름, 성별, 직급을 출력하시오

        2. 문제 풀이(답안)

        -- 문제 1. 재직중이고 현재 연봉이 100000 이상인 직원수가 가장 많은 3개 부서를 출력하세요
        -- 부서, 고소득직원수
        select d.dept_name, count(*) as 고소득직원수
        from dept_emp as de
        left join salaries as s
        on de.emp_no=s.emp_no
        left join departments as d
        on de.dept_no=d.dept_no
        where de.to_date='9999-01-01' and s.salary>100000
        group by d.dept_name
        order by count(*) desc
        limit 3;
        
        -- 문제 2.부서중 직원수가 가장 많은 부서 하나만 찾아주세요(부서이름과, 직원 수 나오게)
        select d.dept_name,count(*)
        from dept_emp as de
        left join departments as d
        on de.dept_no=d.dept_no
        group by d.dept_name
        order by count(*) desc
        limit 1;
        
        -- 문제 3: 재직 중인 사원들 중, 가장 오래 재직중인 직원 5명의 이름, 직함, 연봉을 출력하시오.
        select e.first_name,t.title,s.salary,e.hire_date
        from employees as e
        left join titles as t
        on e.emp_no=t.emp_no
        join salaries as s
        on e.emp_no=s.emp_no
        group by e.first_name
        order by e.hire_date
        limit 0,5;
        
        
        -- 문제 4. Development 부서중 년차가 가장  5 명 출력해 퇴시키시오(재직 중 인원중)
        select e.first_name, year(now()) - year(de.from_date) as 년차, d.dept_name
        from dept_emp as de
        left join departments as d
        on de.dept_no=d.dept_no
        left join employees as e
        on de.emp_no=e.emp_no
        where de.dept_no='d005' and de.to_date='9999-01-01'
        order by 년차 desc
        limit 5;
        
        -- 문제 5.-- 현재 재직중인 사람들의 부서 이름,소수점없는 평균연봉을 구하시오
        select e.first_name,d.dept_name,round(avg(s.salary)) as 연봉
        from employees as e
        left join dept_emp as de
        on e.emp_no=de.emp_no
        join salaries as s
        on e.emp_no=s.emp_no
        join departments as d
        on de.dept_no=d.dept_no
        where de.to_date='9999-01-01'
        group by d.first_name
        order by 연봉 desc;
        
        -- 문제 6. 부서 이동이 있었던 사원의 사번, 부서번호, 성, 이름, 이동 전,후 부서의 소속 기간을 출력하시오.
        select d.emp_no, d.dept_no, e.first_name, e.last_name, d.from_date, d.to_date
        from dept_emp as d
        join employees as e
        on d.emp_no = e.emp_no 
        where d.emp_no in(
            select emp_no
            from dept_emp
            group by emp_no
            having count(emp_no) > 1
        ) 
        order by emp_no;
        
        -- 문제 7. 생일에 입사한 사람을 모두 조회하라
        select *
        from employees as e
        where month(e.birth_date)=month(e.hire_date)
        and day(e.birth_date)=day(e.hire_date);
        
        -- 문제 8. 낮은 번호대로 각 부서의 역대 매니저와 현 매니저의 수를 구하고 그 매니저들의 평균 급여를 구해라.
        -- 출력 예시 - 부서 번호, 부서 이름, 인원수, 평균 급여
        select d.dept_no,d.dept_name, count(distinct dm.to_date='9999-01-01') as '현 매니저 수',
        avg(s.salary) as '평균 연봉'
        from dept_manager as dm
        left join employees as e
        on dm.emp_no=e.emp_no
        left join departments as d
        on dm.dept_no=d.dept_no
        left join salaries as s
        on dm.emp_no=s.emp_no
        where dm.emp_no=e.emp_no
        group by dm.dept_no;
        
        -- 문제 9. 현직자 중 업종을 출력하고 업종별 임금 평균과 최대 임금을 출력하시오. 
        select t.title as '업종', floor(avg(s.salary)) as '업종별 평균', max(s.salary) as '업종최고급여'
        from titles as t
        left join employees as e
        on e.emp_no = t.emp_no
        left join salaries as s
        on t.emp_no = s.emp_no
        where s.to_date >= 9999-01-01  
        group by title;
        
        -- 문제 10. 각 직원(중복x)마다 부서와 직급을 구하라 (단, 오름차순,내림차순은 무시한다)
        select departments.dept_name as 부서, concat(employees.first_name, " ",employees.last_name) as 이름,
        titles.title as 직급 from departments
        join dept_emp
        on departments.dept_no = dept_emp.dept_no
        join employees
        on dept_emp.emp_no = employees.emp_no
        join titles
        on employees.emp_no = titles.emp_no
        group by 이름;
        
        -- 문제 11. 재직중인 senior Engineer 들의 부서와 first_name 그리고 가장 최근 연봉을 출력하세요
        select ti.title, de.dept_name, em.first_name, max(sa.salary)
        from dept_emp as dm
        join departments as de
        on dm.dept_no = de.dept_no
        join titles as ti
        on dm.emp_no = ti.emp_no
        join employees as em
        on em.emp_no = dm.emp_no
        join salaries as sa
        on dm.emp_no = sa.emp_no
        where dm.to_date = '9999-01-01' and ti.title = 'senior Engineer'
        group by dm.emp_no;
        
        --문제 12. 직급이 staff 인 직원의 평균 연봉을 구하세요
        select avg(sa.salary)
        from salaries as sa
        join titles as ti
        on sa.emp_no = ti.emp_no
        where ti.title = 'staff';
        
        -- 문제13. staff들 중 first_name이 Georgi인 동명이인을 찾고 나이가 많은 사람 순으로 정렬하시오. (출력 : title, first_name, last_name, brith_date)
        select t.title, e.first_name, e.last_name, e.birth_date
        from employees as e
        join titles as t
        on e.emp_no = t.emp_no
        where e.first_name = 'Georgi' and t.title ='Staff'
        order by e.birth_date;
        
        -- 문제14. 연봉이 10만 달러 이상인 사람의 사번, 이름, 성별, 직급을 출력하시오
        select e.emp_no, concat(first_name, last_name) as 이름, e.gender, s.salary, t.title
        from employees as e
        left join titles as t
        on e.emp_no = t.emp_no
        join salaries as s
        on t.emp_no = s.emp_no
        group by s.salary
        having s.salary > 100000;

         

        728x90
        반응형

        'MySQL' 카테고리의 다른 글

        [MySQL] 41. 쇼핑몰 서비스 DB 구축 (2)  (0) 2024.06.12
        [MySQL] 40. 쇼핑몰 서비스 DB 구축 (1)  (0) 2024.06.12
        [MySQL] 39. JDBC 설치 및 설정  (0) 2024.06.11
        [MySQL] 38. 블로그 서비스의 DB 구축  (1) 2024.06.11
        [MySQL] 37. 쇼핑몰 서비스의 DB 구축  (0) 2024.06.11
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
      • [MySQL] 1일 1쿼리 (5) : Self join 및 기존 개념 복습
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.