2017-10-30 1 views
1

오라클에서 각 부서의 평균 급여를 보여주는 뷰를 만들고 싶습니다. 내가 사용하고있는 테이블은 empno, 급여deptname 필드를 가진 Employee입니다. 각 부서의 평균 급여를 표시하는 Oracle에서보기 작성?

나는이 일을하여 만들려고 : 나에게 오류 준

create view v_employee 
as select avg(salary),deptname as average_salary from employee 
order by name; 

: 그래서

not a single group function

을 그때

create view v_employee 
as select avg(salary),deptname as average_salary from employee 
group by salary 
order by name 

을 수행하여 그룹화를 시도하는 오류 :

not a GROUP BY expression

이보기를 만들려면 어떻게해야합니까? 감사합니다

+12

힌트 : 'GROUP BY deptname'. –

+2

그리고 그 칼럼 별칭은 첫 번째 칼럼에 더 잘 맞습니다. – jarlh

답변

4
select avg(salary),deptname as average_salary 

당신은 더 라벨이없는 최초의 열의, 2 열을 요청했고, 당신이 "average_salary"DEPTNAME 레이블을 정하지있다. 그래서 당신은 아마 정말 원 :

select deptname, avg(salary) as average_salary 

몇 가지 산술 계정에 각 부서에서 모든 급여, 즉 우리 "그룹"각 부서에 대한 하나의 행에 데이터를 걸립니다 수행 할 수있다이 평균 생산하기.

select deptname, avg(salary) as average_salary from employee 
group by deptname 

우리가 AVG() 같은 집계 함수를 사용하지 않은 select 절에있는 모든 열을 위해, 우리는 GROUP BY 절에 같은 컬럼을 사용해야합니다. 그렇지 않으면 "표현에 의한 그룹이 아님"에 관한 오류 메시지가 나타납니다.

ater에 우리가 만들어보기 코드를 추가 할 수있는 모든이 잠재적으로 매우 비효율적이기 때문에 당신이보기에 order by을 두어서는 안됩니다,

create view v_employee as 
select deptname, avg(salary) as average_salary from employee 
group by deptname 

을하지만. 보기에 후속 검색어 인 경우 THEN에 order by 등이 포함됩니다. 우리가 지금 원하는 것은 먼저 가장 높은 평균이기 때문에 뷰 내부에 포함 된 순서는 단순히 폐기 될 것이라고 예에서

select * 
from v_employee 
where deptname like 's%' 
order by average_salary DESC 

. 또한 where 절을 사용했기 때문에 모든 행이 아닌 몇 행 만 정렬하면됩니다.

관련 문제