반응형

ORA-00937: 단일 그룹의 그룹 함수가 아닙니다.


Group by 관련 오류 메세지


SQL> select  avg(급여), sum(급여) from 직원테이블 (정상 쿼리)

SQL> select 부서코드, avg(급여), sum(급여) from 직원테이블 (실행 오류 : ORA-00937)


직원테이블에서 급여 평균,합계 단일 결과를 확인 할 경우에는 첫번째 쿼리를 사용해도 되지만

부서별로 급여 평균을 구할 경우에는 두번째 쿼리를 사용하면 ORA-00937 오류를 확인 할 수 있습니다.


오류가 나는 이유는 avg(급여), sum(급여) 부분은 전체 테이블에서 하나의 값을 나타고 있습니다.

여기에 부서코드를 추가 하게 되면 부서별 급여 평균과합계를 구하라는 명령이 됩니다.

사람이 처리하게 되면 부서별로 그룹을 나누고 해당 평균과 합계를 자연스럽게 구하겠지만 

DB 입장에서는 그룹을 나누어 처리해야 한다라는 구체적인 명령이 없기 때문에 실행하기 어렵다는 메제지를 표시 하는 겁니다.

그래서 두번째 쿼리를 정상적으로 실행하게 하려면 다음과 같이 그룹별로 처리해라 라는 명령을 추가해 줘야 합니다.


SQL> select 부서코드, avg(급여), sum(급여) from 직원테이블 group by 부서코드


group by 부서코드 명령을 넣어 줌으로써 데이터를 어떤 그룹으로 나우어 처리하도록 DB 쪽에 알려주는 겁니다.


GROUP BY 사용시 유의 사항


1. GROUP BY 뒤에 붙는 컬럼은 조회하는 컬럼이 아니더라도 해당 테이블에 존재하는 컬럼이면 사용이 가능합니다.

SQL> select avg(급여), sum(급여) from 직원테이블 group by 부서코드


2. 조회(select) 절에 사용되는 컬럼은 GROUP BY에 모두 표기해야 한다.

SQL> select 부서코드, 부서명, avg(급여), sum(급여) from 직원테이블 group by 부서코드,부서명


3. GROUP BY 절은 ALIAS를 사용할 수 없고 반드시 컬럼명을 사용해야 합니다.

SQL> select 부서코드 as 부서, avg(급여), sum(급여) from 직원테이블 group by 부서코드




반응형

+ Recent posts