데이터베이스/Oracle

다중행 함수

eunsour 2020. 7. 27.
반응형

DBMS - Oracle Database

VERSION - Oracle Database 11g Release 2

IDE - SQL Developer

 

실습용 데이터를 입력하지 않고, 오라클 데이터베이스를 설치하면 기본으로 제공되는 테이블과 계정들로 학습한 내용입니다. 


※ 하나의 열에 출력 결과를 담는 다중행 함수

1. 합계를 구하는 SUM 함수

SELECT SUM(COMM) 
	FROM EMP; 

 

2. 데이터 개수를 구해주는 COUNT 함수 

SELECT COUNT(*) FROM EMP 
    WHERE DEPTNO = 30; 

 

3. 최댓값과 최솟값을 구하는 MAX, MIN 함수 

SELECT MAX(SAL) FROM EMP 
    WHERE DEPTNO = 10; 
SELECT MIN(SAL) FROM EMP 
    WHERE DEPTNO = 10; 

 

4. 평균 값을 구하는 AVG 함수 

SELECT AVG(DISTINCT SAL) FROM EMP    
    WHERE DEPTNO = 30; 

결과 값을 원하는 열로 묶어 출력하는 GROUP BY절 

1. GROUP BY를 사용하여 부서번호 및 직책별 평균 급여 출력하기

특정 열 또는 데이터를 기준으로 데이터를 그룹으로 묶는다.

SELECT DEPTNO, JOB, AVG(SAL) FROM EMP 
    GROUP BY DEPTNO, JOB 
    ORDER BY DEPTNO, JOB; 

결과 >> 

GROUP BY절을 사용할 때 유의점
: 다중행 함수를 사용하지 않은 일반 열은 GROUP BY절에 명시하지 않으면 SELECT절에서 사용할 수 없다.

GROUP BY절에 조건을 줄 때 사용하는 HAVING절  

1. GROUP BY절과 HAVING절을 사용하여 출력하기

SELECT DEPTNO, JOB, AVG(SAL) FROM EMP 
    GROUP BY DEPTNO, JOB 
      HAVING AVG(SAL) >= 2000 
    ORDER BY DEPTNO, JOB; 

결과 >>

HAVING절을 사용할 때 유의점
WHERE절은 출력 대상 행을 제한하고, HAVING절은 그룹화된 대상을 출력에서 제한하므로 쓰임새가 전혀 다르다.

 

2. WHERE절과 HAVING절의 차이점

SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
    GROUP BY DEPTNO, JOB
      HAVING AVG(SAL) >= 2000
    ORDER BY DEPTNO, JOB;

결과 >>

WHERE절을 사용하지 않고 HAVING절만 사용한 경우


SELECT DEPTNO, JOB, AVG(SAL) FROM EMP
     WHERE SAL <= 3000
    GROUP BY DEPTNO, JOB
      HAVING AVG(SAL) >= 2000
    ORDER BY DEPTNO, JOB;

결과 >>

WHERE절과 HAVING절을 모두 사용한 경우

WHERE절을 추가한 SELECT문에서는 10번 부서의 PRESIDENT 데이터가 출력되지 않는다.
이는 WHERE절이 GROUP BY절과 HAVING절을 사용한 데이터 그룹화보다 먼저 출력 대상이 될 행을 제한하기 때문. 

1. WHERE절로 급여가 3000 이하인 데이터 제외
2. GROUP BY절로 부서별, 직책별 데이터를 그룹화
3. HAVING절에서 평균 급여가 2000 이상인 그룹만 그룹화해서 제한

 

 

 

 

Reference

 
Do it! 오라클로 배우는 데이터베이스 입문
저자 : 이지훈
출판 : 이지스퍼블리싱
발매 : 2018.10.30

 

반응형

댓글