[코딩테스트] 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_DEPARTMENTHR_EMPLOYEESHR_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

YunSeolAn