Algorithm/Programmers SQL

[MySQL] 프로그래머스 조건에 맞는 사원 정보 조회하기

제우제우 2024. 9. 8. 15:02

https://school.programmers.co.kr/learn/courses/30/lessons/284527

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > GROUP BY > 조건에 맞는 사원 정보 조회하기

문제 분석

난이도: LEVEL2

문제 요구사항

HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회하려 합니다.

2022년도 평가 점수가 가장 높은 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SQL문을 작성해주세요.
2022년도의 평가 점수는 상,하반기 점수의 합을 의미하고, 평가 점수를 나타내는 컬럼의 이름은 SCORE로 해주세요.

 

테이블 분석 

 

HR_DEPARTMENT 테이블 

DEPT_ID: 부서 ID

DEPT_NAME_KR: 국문 부서명

DEPT_NAME_EN: 영문 부서명

LOCATION: 부서 위치

 

HR_EMPLOYEES 테이블 

EMP_NO: 사번 

EMP_NAME: 성명 

DEPT_ID: 부서 ID ( HR_DEPARTMENT 테이블의 DEPT_ID와 동일)

POSITION: 직책 

EMAIL: 이메일 

COMP_TEL: 전화번호 

HIRE_DATE: 입사일 

SAL: 연봉

 

HR_GRADE 

EMP_NO: 사번  (HR_EMPLOYEES테이블의 EMP_NO와 동일)

YEAR: 연도 

HALF_YEAR: 반기

SCORE: 평가 점수 

 

문제 요구 정리 

2022년도 한해 평가 점수(상반기 + 하반기) 평가 점수가 가장 높은 사원 정보

원하는 사원 정보: 점수 AS SCORE(HR_GRADE), 사번(HR_EMPLOYEES) , 성명(HR_EMPLOYEES),

직책(HR_EMPLOYEES), 이메일(HR_EMPLOYEES)

 

원하는 정보를 보면 HR_DEPARTMENT 테이블의 정보는 필요하지 않는다. 

그럼 HR_EMPLOYEES, HR_GRADE  두 테이블만 조인해서 데이터를 얻으면 된다. 

 

정답 코드1

SELECT 
SUM(SCORE) SCORE,
E.EMP_NO,	
EMP_NAME, POSITION,	
EMAIL
FROM  
HR_EMPLOYEES E JOIN HR_GRADE G
ON E.EMP_NO = G.EMP_NO
GROUP BY E.EMP_NO
ORDER BY SUM(SCORE) DESC
LIMIT 1

 

사원 번호를 기준으로 그룹화(상반기 + 하반기) 하고

그룹화된 점수를 기준으로 내림차순 정렬하여 

딱 1개의 ROW만 출력하도록 하였다. 

 

정답 코드2

SELECT 
SUM(SCORE) SCORE,
E.EMP_NO,	
EMP_NAME, POSITION,	
EMAIL
FROM  
HR_EMPLOYEES E JOIN HR_GRADE G
ON E.EMP_NO = G.EMP_NO
GROUP BY E.EMP_NO
HAVING
    SUM(SCORE) = (SELECT MAX(R.RESULT)
                  FROM (SELECT SUM(SCORE) RESULT , EMP_NO
                        FROM HR_GRADE
                        GROUP BY EMP_NO) AS R
                  )

HAVING 활용