PRACTICE/SQL

[MySQL] 2단계 33. 조건에 맞는 사원 정보 조회하기

j1ngerhead 2025. 1. 3. 23:44

 

문제 링크

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

SELECT SUM(HG.SCORE) AS SCORE, HE.EMP_NO, HE.EMP_NAME, HE.POSITION, HE.EMAIL
FROM HR_DEPARTMENT HD
JOIN HR_EMPLOYEES HE ON HD.DEPT_ID = HE.DEPT_ID
JOIN HR_GRADE HG ON HE.EMP_NO = HG.EMP_NO
WHERE HG.YEAR = 2022
GROUP BY HE.EMP_NO, HE.EMP_NAME, HE.POSITION, HE.EMAIL
ORDER BY SCORE DESC
LIMIT 1;

 

  • 2022년도의 상·하반기 점수를 합산
  • 합산한 점수 기준으로 내림차순 정렬 후 가장 높은 점수를 가진 사원 정보를 반환
관련 메모


MySQL에서는 GROUP BY절에 포함된 열 이외에 
SELECT에 있는 모든 열도 GROUP BY에 포함하거나, 집계 함수를 통해 사용해야 한다. 

그렇지 않으면 MySQL은 어떤 값을 반환해야 할지 모호하다고 판단한다.

ex ) GROUP BY 규칙 이유
GROUP BY HE.EMP_NO로만 그룹화하고 
HE.EMP_NAME, HE.POSITION, HE.EMAIL을 SELECT 절에 그대로 쓰면 
각 EMP_NO에 대해 어떤 EMP_NAME, POSITION, EMAIL 값을 반환할지 명확하지 않다. 
예를 들어, 하나의 사원이 여러 부서에 속할 경우 각기 다른 사원 정보가 있을 수 있기 때문이다.

이를 해결하기 위해 GROUP BY 절에 이 필드를 모두 포함해 사원의 모든 정보가 고유하게 결정되도록 설정하거나
MAX(), MIN()과 같은 집계 함수를 사용해 각 사원의 한 가지 값을 명확히 선택하는 방법을 사용한다.

 

결론 : 이 문제의 쿼리에서 사원 정보가 고유하게 결정되도록 GROUP BY에 EMP_NAME, POSITION, EMAIL 컬럼을 추가해주는 것이 정확하다.

320x100