[SQL]Lv4(2). 가장 높은 월급을 받는 직원은?

2025. 1. 21. 17:10·코딩테스트/SQL

아래에 나오는 데이터는 서버에 없는 데이터 이기때문에 따로 CSV 파일을 만들어 LOCALHOST(MY SQL) 서버에 데이터를 넣어주어야한다.

방법:https://computerreport.tistory.com/16

 

CSV 파일을 이용해 데이터 가져오기(MY SQL)

해당 테이블을 드래그하여 복사하고  EXCEL 파일에 붙여넣은뒤 CSV 파일로 저장   Click 부분을 누르고 설정한 Username 과 MySQL 설치시 설정한 비밀번호 입력 -> 완료 Database 파일 우클릭 후 Create New

computerreport.tistory.com

 

문제

Employees 테이블:
EmployeeID
Name
Department
Salary
ManagerID
1
Alice
HR
70000
NULL
2
Bob
IT
90000
1
3
Charlie
IT
80000
2
4
David
IT
85000
2
5
Eve
HR
75000
1
6
Frank
Finance
95000
NULL
7
Grace
Finance
80000
6
8
Heidi
IT
95000
2

주의사항

- 모두 서브쿼리 join,group by,Having 등을 사용하여야한다.

요구사항

1.
각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.

 

ex)
 
Name
Department
Salary
Top_Earner
Top_Salary
Alice
HR
70000
Eve
75000
Bob
IT
90000
Heidi
95000
Charlie
IT
80000
Heidi
95000
David
IT
85000
Heidi
95000
Eve
HR
75000
Eve
75000
Frank
Finance
95000
Frank
95000
Grace
Finance
80000
Frank
95000
Heidi
IT
95000
Heidi
95000
select e1.Name,
       e1.Department,
       e1.Salary, 
       e3.top_Earner, 
       e3.top_salary 
from employee e1 inner join 
                          (select Department,
                                  Name Top_Earner,
                                  Salary Top_Salary
                           from(select Department,
                                       Name,
                                       Salary,
                                       rank()over(partition by Department order by Salary desc) rn
                                from employee)e2
                           where rn=1)e3
 on e1.Department = e3.Department

 

Lv.4 이전에 했던 알고리즘과 비슷한 맥락으로 풀어보았다.

 

코드 해석

  • 부서별로 월급이 많은 순서대로 순위를 매기기  -> 부서별로 rank가 1등인 인스턴스만 추출  -> 모든 인스턴스와 그 부서의 가장 높은 월급과 직원의 이름이 나오는 컬럼을 만들기  ->  부서 컬럼을 inner join하여 일치하는 값 출력

 

 

 

2.
부서별로 평균 월급이 가장 높은 부서의 이름과 해당 부서의 평균 월급을 조회하는 SQL 쿼리를 작성해주세요.

 

ex)

Department
Avg_Salary
IT
87500

 

 

방법 1

 

햇갈려서 정답을 참고 하였는데 다양한 방법이 있어 처음 본 함수에 대해 알아보았다.

LIMIT 라는 함수인데

 

LIMIT 숫자1,숫자2

쿼리 인덱스컬럼 숫자부터 숫자 2까지 출력한다.

Order by 랑 쓰면 유용하게 쓰일거 같다.

 

그래서 limit 함수를 활용하면 쉽게 풀 수 있다.

select Department,Avg(Salary) Avg_Salary
from employee
group by 1
order by 2 desc
limit 1

 

평균이 같더라도 젤위의 하나의 값만 출력하게 된다.

 

 

방법2

select Department,Avg_Salary
from(
select Department,Avg_Salary,rank() over(order by avg_salary desc) rn
from (select department,avg(salary) Avg_Salary
      from employee
      group by 1)a
      )b
where rn=1

 

코드 해석

  • 부서별로 Salary 평균 구하기 -> 가장 salary의 평균이 높은 부서별로 rank 매기기 -> rank가 1인것만 출력 

 

이 코드를 사용하면 평균이 같다면 2개의 결과가 출력한다.

'코딩테스트 > SQL' 카테고리의 다른 글

[SQL]Lv5. 예산이 가장 큰 프로젝트는?  (0) 2025.01.23
[SQL]Lv5. 가장 많이 팔린 품목은?  (0) 2025.01.23
[SQL]Lv4. 단골 고객님 찾기  (0) 2025.01.20
[SQL]Lv3. 이용자의 포인트 조회하기  (0) 2025.01.20
[SQL]Lv2. 날짜별 획득포인트 조회하기  (0) 2025.01.17
'코딩테스트/SQL' 카테고리의 다른 글
  • [SQL]Lv5. 예산이 가장 큰 프로젝트는?
  • [SQL]Lv5. 가장 많이 팔린 품목은?
  • [SQL]Lv4. 단골 고객님 찾기
  • [SQL]Lv3. 이용자의 포인트 조회하기
코딩로봇
코딩로봇
금융 IT 개발자
  • 코딩로봇
    쟈니의 일지
    코딩로봇
  • 전체
    오늘
    어제
    • 분류 전체보기 (151) N
      • JavaScript (8)
      • SQL (11)
      • 코딩테스트 (30)
        • Java (15)
        • SQL (13)
      • Java (10)
      • 프로젝트 (30) N
        • 트러블슈팅 (10)
        • 프로젝트 회고 (18) N
      • git,Github (2)
      • TIL (38)
      • Spring (20)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java #arraylist #list #배열
    스파르타 코딩 #부트캠프 #첫ot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩로봇
[SQL]Lv4(2). 가장 높은 월급을 받는 직원은?
상단으로

티스토리툴바