본문으로 바로가기

SQL 함수-그룹함수 / GROUP BY 절 / HAVING절

category ORACLE 2019. 11. 15. 15:28

그룹함수


  • 여러 행 또는 테이블 전체에 대해 함수가 적용되어 하나의 결과를 반환하는 함수
  • NULL값은 제외하고 계산함.

 

COUNT

  • 테이블에서 조건을 만족하는 row의 개수를 반환하는 함수(NULL값 제외)
//문법 
//* : 컬럼에 상관 없이 모든 ROW 선택
COUNT(컬럼명||*)

//예시
SELECT COUNT(ename) FROM emp;
SELECT COUNT(*) FROM emp ;

 

SUM

  • 해당 컬럼 값들의 총합을 구하는 함수
//문법
SUM(컬럼명)

//예시
SELECT SUM(sal) FROM emp;

 

 

AVG

  • 해당 컬럼 값들의 평균을 구하는 함수
  • NULL 값을 포함해서 평균을 구하려면 NVL( )함수를 함께 쓴다.
//문법
AVG(칼럼명)

//예시
SELECT AVG(sal) FROM emp;

// NULL값도 함께 계산하는 경우
SELECT AVG( NVL( comm , 0 ) ) FROM emp;
 

 

MAX

  • 해당 컬럼 값들 중 최대값을 구하는 함수
//문법
MAX(칼럼명) 

//예시
SELECT MAX(sal) FROM emp;
 

 

MIN

  • 해당 컬럼 값들 중 최소값을 구하는 함수
//문법
MIN(컬럼명)

//예시
SELECT MIN(sal) FROM emp;

 

 

GROUP BY절


  • 그룹함수와 단순 컬럼은 SELECT절에서 동시 사용이 불가능하다.
  • GROUP BY절을 사용하여 단순 컬럼을 그룹으로 묶으면 동시 사용이 가능해진다.
  • GROUP BY 절 작정시 유의 사항 

    (1) SELECT절 뒤에 사용할 수 있는 컬럼은 GROUP BY 뒤에 기술된 컬럼이거나 그룹함수가 적용된 컬럼만 사용가능
    (2) WHERE절을 사용하여 행을 그룹으로 그룹핑 하기 전에 제외 시킬 수 있다.
    (3)그룹으로 묶은 후 행을 제외 시키려면 HAVING절을 사용한다.
    (4)GROUP BY절 뒤에는 컬럼 별칭(alias) 및 컬럼 순서 위치 값을 사용할 수 없다.
    (5)WHERE절에는 그룹함수를 사용할 수 없다.
//예시1
//급여가 1000 이상인 사원들의 부서별 평균 급여의 반올림 값을 부서번호로
//내림차순 정렬해서 출력해 보세요.
 SELECT deptno, ROUND( AVG(sal) )
 FROM emp
 WHERE sal >= 1000
 GROUP BY deptno
 ORDER BY deptno DESC ;


//예시2
//급여가 2000 이상인 사원들의 부서별 평균 급여의 반올림 값을 
//평균 급여의 반올림 값으로 오름차순 정렬해서 출력해 보세요.

SELECT deptno, ROUND( AVG(sal) ) 
FROM emp
WHERE sal >= 2000
GROUP BY deptno
ORDER BY ROUND( AVG(sal) ) ASC ;


//예시3
//각 부서별 같은 업무(job)를 하는 사람의 인원수를 구해서 
//부서번호, 업무(job), 인원수를 부서번호에 대해서  오름차순 정렬해서 
//출력해 보세요.
SELECT deptno, job, count(*)
FROM emp
GROUP BY deptno, job
ORDER BY deptno ASC

 

 

HAVING 절


  • GROUP BY절에 의해서 생성된 결과 중에서 조건과 일치하는 데이터를 추출할때 사용된다.
//예시3
//급여가 1000 이상인 사원들의 부서별 평균 급여를 출력해보세요
 //단, 부서별 평균 급여가 2000 이상인 부서만 출력하세요
 SELECT deptno, AVG(sal)
 FROM emp
 WHERE sal >= 1000
 GROUP BY deptno
 HAVING AVG(sal) >= 2000 ; 

 

 

 

 

 

'ORACLE' 카테고리의 다른 글

조인  (0) 2019.11.16
View(뷰) / Sequence(시퀀스) / SYNONYM(동의어)  (0) 2019.11.15
SQL함수 / 단일행 함수  (0) 2019.11.15
DML / TCL  (0) 2019.11.15
DDL 명령어 / TABLE 객체 / ROWID / ROWNUM  (0) 2019.11.15