join 관련
336
4 asked
안녕하세요!
강의를 듣다가 궁금한것이 생겨서 문의 드립니다.
-- 부서명 SALES와 RESEARCH 소속 직원별로 과거부터 현재까지 모든 급여를 취합한 평균 급여
select b.empno, max(b.ename) as ename, avg(c.sal) as avg_sal --, count(*) as cnt
from hr.dept a
join hr.emp b on a.deptno = b.deptno
join hr.emp_salary_hist c on b.empno = c.empno
where a.dname in('SALES', 'RESEARCH')
group by b.empno
order by 1;
여기서 왜 max(b.ename) 이라고 해야하는지 잘 이해가 안가서 문의 드립니다..!
감사합니다.
Answer 1
0
안녕하십니까,
max(ename)에 어떤 부분이 이해가 안되는지 자세하게 적어주시지는 않았지만 일단,
강의에서도 설명드리지만,
group by 를 적용하면 select 절에 올 수 있는 것은 group by 에 사용된 컬럼과 aggregation 함수만이 올 수 있습니다.
만약 group by empno를 하게 되면 최종 만들어 지는 집합이 empno 레벨로 집합이 생성됩니다. 그런데 여기서 개별 empno에 따른 직원명(ename)을 보고자 한다면 앞에서 말씀드린 이유로 인해서 그냥 ename을 적용해서는 안됩니다.
하나의 empno로 직원명이 단 하나를 가지므로 max(ename)을 하게 되면 단 하나의 직원명만 추출하게 됩니다. ename이 문자열이기 때문에 sum(), count()와 같이 숫자값을 반환하는 함수를 적용해서는 안됩니다. 반면에 max(ename)대신, min(ename)을 적용해도 됩니다. 하나의 empno로 직원명이 단 하나이기 때문에 max나 min 모두 다 동일한 직원명을 반환하게 됩니다.
이처럼 group by 를 적용하게 되면 원래 집합에 있는 다른 컬럼들을 가져 오는데 제약이 있습니다. 실습 예제는 다른 컬럼들을 가져오는 데 제약이 있지만, 어떻게 하면 일부 컬럼들을 가져올 수 있는지(여기서는 ename)를 설명드리기 위해서 사용되었습니다.
원하시는 답변이 아니면 다시 말씀해 주십시요.
감사합니다.
'레벨 유지'의 의미에 대한 질문
0
52
2
date_part
0
55
2
lag/lead offset 관련 질문
0
55
2
join 관련 질문 (inner join, left join)
1
100
2
배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?
0
89
2
Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다
0
53
2
rollup시 null값 매출 라벨링
0
54
2
10. 조인 실습 - 02 관련 질문
0
59
1
조인실습03 - join의 pk-fk join
0
108
2
조인실습03 - join의 pk-fk join
0
68
2
(공유)맥, 스키마 import
0
81
2
sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?
0
137
2
1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?
0
131
2
안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.
0
91
1
섹션5 Group by 실습-01 강의 예제 질문
0
117
2
섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문
0
123
2
섹션2 조인 실습 01 강의 질문
0
133
2
lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.
0
126
1
Dbeaver오류
0
630
2
직원 별 가장 높은 매출
0
118
1
강의순서대로 실습코드순알려주세요.
0
133
1
m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?
0
130
1
rollup
0
91
2
Dbeaver에 접속해도 postgressql이 네비게이터에 안보입니다.
0
355
2

