• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

Department Highest Salary 질문

20.07.31 09:25 작성 조회수 76

2

안녕하세요! 저는 아래처럼 작성했는데, 혹시 이 방식은 틀린걸까요? 

SELECT D.Name as Department, M.Name as Employee, M.Salary as Salary

FROM (SELECT Name, MAX(Salary), DepartmentId

        FROM Employee

        GROUP BY DepartmentId;

        ) AS M

JOIN Department AS D

ON M.DepartmentId = D.Id

답변 1

답변을 작성해보세요.

0

안녕하세요 Heekang Jeon님, 답변 드립니다.

해당 코드를 리트코드에서 실행 후 오류가 나는 것을 확인하셨을 텐데요,

1) 우선 FROM절 서브쿼리 내에서 MAX(Salary)의 alias를 작성하지 않았기 때문에, 첫 번째 SELECT절에 적어주신 M.Salary는 존재하지 않습니다. 따라서 FROM (SELECT Name, MAX(Salary) as Salary, DepartmentId 와 같이 두 번째 줄의 코드를 수정해야 합니다.

2) GROUP BY 절에는 SELECT 절에 작성된, 집계함수를 제외한 모든 컬럼을 적어주어야 합니다. 작성하신 서브쿼리에서 Name을 출력하신다면, GROUP BY 에 Name도 추가해주셔야 합니다. 하지만 해당 서브쿼리만 따로 실행해보면, GROUP BY 에 Name을 추가함의 여부와 관계없이 예상한 결과와는 다름을 알 수 있습니다. 따라서 강의에서는 DepartmentId별로 Max(Salary)를 출력해 Employee 테이블과 JOIN하여 쿼리를 작성하였습니다.

3) 서브쿼리의 출력 결과가 적절하지 않기 때문에, Department 테이블과의 JOIN에서도 틀린 결과가 출력됩니다.

서브쿼리를 사용하실 때는, 서브쿼리만 별도로 실행하여 내가 원하는 값이 나오는 지 확인 후 순서대로 쿼리를 쌓아간다는 느낌으로 진행하시는 것이 좋습니다. 또한, 집계함수 사용 시에는 alias를 작성했는 지 반드시 확인해주세요.


해당 쿼리를 직접 다시 수정해보시고 강의 참고하시면 도움이 될 것 같습니다.
좋은 질문 감사드리고, 궁금한 점 있으시다면 언제든 질문 남겨주세요 :)