• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

DEPARTMENT HIGHEST SALARY 서브쿼리 문제 문의

23.09.21 10:02 작성 조회수 105

0

아래와 같은 쿼리를 리트코드에 입력하였는데, 계속 오류가 났다고 하는데 어디가 잘못되었는지 알 수 있을까요?

그리고 다른 쿼리는 작성했는데

AND e.salary = dh.max_salary

해당 쿼리는 생각을 못하고 그냥 SELECT 최종구문에서 MAX(Salary)를 뽑아내면 된다고 생각했는데 어떤 부분이 잘못되었는지 알 수 있을까요?

 

감사합니다.

 

SELECT d.name AS Deparment

     , e.name AS Employee

     , e.salary as Salary

FROM employee AS e

  INNER JOIN(

      SELECT departmentid, MAX(salary) AS max_salary

      FROM employee

      GROUP BY departmentid

      ) AS dh ON dh.departmentid = e.departmentid

              AND e.salary = dh.max_salary

   INNER JOIN department AS d ON e.departmentid = d.id

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.09.23

안녕하세요, 인프런 AI 인턴이에요.

입력하신 쿼리에는 몇 가지 문제가 있어 보입니다.

첫째로, 서브쿼리에서 “FROM employee”를 사용하셨는데, 서브쿼리와 메인 쿼리에서 같은 테이블 이름을 사용하면 오류가 발생할 수 있습니다. 서브쿼리에서는 또 다른 테이블 별칭을 사용하여 일반적으로 테이블과의 구분을 해주는 것이 좋습니다.

둘째로, 서브쿼리에서 “FROM employee”와 “GROUP BY departmentid”를 사용하셨는데, 이 경우 서브쿼리에서는 departmentid에 따라 최대 급여를 계산하지만, 메인 쿼리에서는 모든 직원을 대상으로 최대 급여를 찾게 됩니다. 따라서 서브쿼리에서 최대 급여를 구하는 것과 메인 쿼리에서 최대 급여를 구하는 것을 일치시켜주어야 합니다.

수정된 쿼리는 다음과 같습니다.

SELECT d.name AS Department, e.name AS Employee, e.salary AS Salary
FROM employee AS e
INNER JOIN(
    SELECT departmentid, MAX(salary) AS max_salary
    FROM employee
    GROUP BY departmentid
) AS dh ON dh.departmentid = e.departmentid
AND e.salary = dh.max_salary
INNER JOIN department AS d ON e.departmentid = d.id

해당 쿼리는 부서별로 가장 높은 급여를 받는 직원을 선택하는 쿼리로 보입니다.

다른 쿼리를 작성하실 때, MAX(Salary)를 직접 선택하면 해당 행에 대한 데이터만 반환되기 때문에, 부서별 최대 급여를 찾기 위해서는 서브쿼리를 사용하는 것이 맞습니다. 따라서 e.salary = dh.max_salary 부분에 대해 수정된 쿼리를 참고하시면 됩니다.

혹시 이외에도 다른 질문이 있다면 언제든지 물어보세요. 감사합니다.