sql 스칼라 부속질의 질문 0 1 121

by starter [MySQL] [2021.10.13 18:03:12]


정말 하다하다 안 풀려서 질문올려봅니다.

<employees>테이블에는 employee_id(PK), job_id, name, salary, department_id(FK)가 있고
<departments>테이블에는 department_id(PK)가 있습니다.

풀려는 문제는
스칼라 부속질의을 이용해서 모든 사원의 소속부서 평균연봉을 구한 다음,
결과로 name, job_id, salary, department_id, Department Avg Salary(소속부서 평균연봉)을 출력하라는 건데요

#문제 코드
select name, job_id, salary, e.department_id, (select round(avg(salary))
                                                           from departments d
                                                           where e.department_id = d.department_id
                                                           group by d.department_id) 'Department Avg Salary'
from employees e;

위 코드의 결과로 1행만 나옵니다. 값도 다르구요.
주질의와 부속질의를 따로 실행해보면 각각 값이 나오는데, 모든 사원이 안 나오는 이유가 뭘까요?
잘못된 부분을 설명해주시면 정말 감사하겠습니다.

되게 간단해보였는데 어제부터 못 풀었어요.

by 마농 [2021.10.14 09:51:51]

1. 글세요?
- 올려주신 쿼리는 서브쿼리 빼고 메인쿼리만 보면
- Where 절이 없으므로 모든사원이 나오는게 맞습니다. 1행만 나온다는게 말이 안됩니다.
2. 그리고
- 서브쿼리 비교 대상은 departments 가 아니라 employees 입니다.
 

SELECT name
     , job_id
     , salary
     , department_id
     , (SELECT ROUND(AVG(x.salary))
          FROM employees x
         WHERE x.department_id = e.department_id
        ) "Department Avg Salary"
  FROM employees e
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입