[오라클] 그룹행 함수

 

GROUP 기본 함수 

기능
SUM 컬럼의 합계를 구함
AVG 컬럼의 평균값을 구함
MAX 컬럼의 최대값을 구함
MIN 컬럼의 최소값을 구함
COUNT 컬럼의 갯수를 구함

 

사용예

SELECT SUM(SAL)SUM_SAL,ROUND(AVG(SAL),1) AVG_SAL, MAX(SAL)MAX_SAL,MIN(SAL) MIN_SAL, COUNT(*) COUNT_SAL 
FROM EMP;

 

결과값

SAL 컬럼의 순서대로 합,평균,최대,최소,갯수를 구해보았다.

 

 

위처럼 컬럼 하나만 그룹함수를 사용해서 결과를 구할때는 GROUP BY절을 사용하지 않아도 되지만 

다른 컬럼을 기준으로 그룹함수를 사용할때는 GROUP BY절을 사용해야 한다.


예제

EMP테이블에서 HIREDATE를 연도만 출력되도록하고, 부서번호, 평균/최대/최소 급여, 입사년도+부서번호별 직원수를 구하는 쿼리를 작성해보자

SELECT TO_CHAR(HIREDATE,'YYYY') HIREYEAR, DEPTNO,  
	ROUND(AVG(SAL),0) 평균 ,MAX(SAL) 최대,MIN(SAL) 최소, COUNT(*)사람수
	
    FROM EMP
		GROUP BY TO_CHAR(HIREDATE,'YYYY'),DEPTNO
		ORDER BY TO_CHAR(HIREDATE,'YYYY') ASC;

 

TO_CHAR() 라는 단일행 문자함수를 사용해서 HIREDATE YY-MM-DD 형식의 날짜형식을 YYYY로 바꿔주었고
(70-02-28 => 1970) 나머지는 그룹함수를  사용해 SAL컬럼의 값들을 연산해 하나의 행으로 합쳐주었다. 

HIREDATE와 DEPTNO를 GROUP BY 절로 묶어주여야 한다. 단 HIREDATE를 TO_CHAR() 함수로 사용했기 때문에
GROUP BY로 지정할때 HIREDATE가 아닌 SELECT에 지정했던 그대로 TO_CHAR(HIREDATE,'YYYY') 를 입력해주어야한다.

 

 

 

HAVING 조건절

GROUP BY 절을 통해 그룹화된 결과값의 결과를 제한한다. ( WHERE와 비슷하게 사용되지만 WHERE은 그룹함수에서 사용 불가하다. )

사용법

//HAVING 사용 X 
SELECT TO_CHAR(HIREDATE,'YYYY') HIREYEAR, DEPTNO,  ROUND(AVG(SAL),0) 평균 ,MAX(SAL) 최대,MIN(SAL) 최소, COUNT(*)사람수
FROM EMP
GROUP BY TO_CHAR(HIREDATE,'YYYY'),DEPTNO
ORDER BY TO_CHAR(HIREDATE,'YYYY') ASC;

//HAVING으로 최대 급여가 3000이상인것들만 출력하는 조건을 주어 출력
SELECT TO_CHAR(HIREDATE,'YYYY') HIREYEAR, DEPTNO,  ROUND(AVG(SAL),0) 평균 ,MAX(SAL) 최대,MIN(SAL) 최소, COUNT(*)사람수
FROM EMP
GROUP BY TO_CHAR(HIREDATE,'YYYY'),DEPTNO
HAVING MAX(SAL) >=3000
ORDER BY TO_CHAR(HIREDATE,'YYYY') ASC;

 

 

댓글

Designed by JB FACTORY