테이블 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