테이블 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문을 작성해주세요.예시

풀이
해당 직원들의 상반기, 하반기의
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
);

Share article