[코딩테스트] 20. 조건에 맞는 사원 정보 조회하기

윤설안's avatar
Mar 25, 2025
[코딩테스트] 20. 조건에 맞는 사원 정보 조회하기

테이블 index

📌

HR_DEPARTMENT 

Column name
Type
Nullable
DEPT_ID
VARCHAR
FALSE
DEPT_NAME_KR
VARCHAR
FALSE
DEPT_NAME_EN
VARCHAR
FALSE
LOCATION
VARCHAR
FLASE

HR_EMPLOYEES 

Column name
Type
Nullable
EMP_NO
VARCHAR
FALSE
EMP_NAME
VARCHAR
FALSE
DEPT_ID
VARCHAR
FALSE
POSITION
VARCHAR
FALSE
EMAIL
VARCHAR
FALSE
COMP_TEL
VARCHAR
FALSE
HIRE_DATE
DATE
FALSE
SAL
NUMBER
FALSE

HR_GRADE 

Column name
Type
Nullable
EMP_NO
VARCHAR
FALSE
YEAR
NUMBER
FALSE
HALF_YEAR
NUMBER
FALSE
SCORE
NUMBER
FALSE

문제

💡
HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다. 2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성해주세요.

예시

notion image

풀이

❗
해당 직원들의 상반기, 하반기의 score를 더하는 쿼리를 구했다.
SELECT emp_no, sum(score) score from HR_GRADE group by emp_no
해당 직원들의 개인정보는 다른 테이블에 있기 때문에 join을 사용하여 개인정보들도 출력
SELECT sum(score) score, hr.emp_no, he.emp_name, he.position, he.email from HR_GRADE hr inner join HR_EMPLOYEES he ON hr.emp_no = he.emp_no where group by emp_no
이후 score를 내림차순으로 구한 뒤 가장 맨 위에 column 한개만 출력
SELECT sum(score) score, hr.emp_no, he.emp_name, he.position, he.email from HR_GRADE hr inner join HR_EMPLOYEES he ON hr.emp_no = he.emp_no group by emp_no order by score desc limit 1
문제에는 없지만 공동 1등이 존재 할 경우도 있다. 그럴 때는 subquery를 사용하여, score가 가장 높은 사람을 구한 뒤 해당 사원만 조회하면 된다
SELECT EMP_NO, SUM(SCORE) SCORE FROM HR_GRADE GROUP BY EMP_NO HAVING SUM(SCORE) = ( SELECT MAX(TOTAL_SCORE) FROM ( SELECT EMP_NO, SUM(SCORE) SCORE TOTAL_ FROM HR_GRADE GROUP BY EMP_NO ) ntb );
notion image
 
Share article