티스토리 뷰

반응형


그룹함수 

  • 이전 포스팅 들에서 살펴본 단일행 함수는 하나의 인풋, 하나의 아웃풋을 가지는 함수 였습니다. 하지만 이번에 살펴볼 그룹 함수의 경우는 여러개의 인풋, 하나의 아웃풋을 가지는 함수입니다. 예를 들어 평균, 합, 개수 등 여러개의 인풋에서 하나의 값을 도출할 때 사용하는 함수들을 그룹함수라고 할 수 있습니다.

  • ORACLE 에서 제공하는 그룹 함수는 총 7 개가 있습니다. SUM, COUNT, MAX, MIN, AVG, STDDEV, VARIANCE 로 총 7개 입니다. 각각 열의 합, 개수, 최대값, 최소값, 평균, 표준편차, 분산을 구하는 함수 입니다.

    • SELECT SUM(SAL) FROM EMP;

    • SELECT AVG(SAL) FROM EMP;

    • SELECT STDDEV(SAL) FROM EMP;

  • 위의 쿼리들 처럼 그룹함수의 파라미터는 열이름을 사용합니다.

    • SELECT COUNT(*) FROM EMP;

    • SELECT COUNT(SAL) FROM EMP;

  • COUNT 함수의 경우 다음과 같이 2가지 형태로 사용할 수 있습니다.  COUNT(*) 는 테이블에서 SELECT 문의 조건을 충족하는 행 수를 반환하며 어떤 행에 NULL 값도 개수에 포함합니다. 하지만 COUNT(SAL) 의 경우에는 NULL 값의 경우에는 개수에 포함하지 않습니다.

데이터 그룹 

  • 그룹 함수를 사용할 때 전체 테이블을 대상으로 하지 않고 테이블을 그룹지어서 분석을 하는 것 또한 가능합니다. 이런 작업은 GROUP BY 함수를 사용해서 할 수 있습니다. 예를 들어 전체 인원의 월급 총합을 구하는 것이 아니라 직업별 월급의 총합을 구하고 싶을 때 데이터 그룹을 구성해서 함수를 사용한다고 할 수 있습니다.

  • GROUP BY 절은 SELECT, WHERE 절 뒤에 위치하며 ORDER BY 절 앞에 위치합니다.

    • SELECT JOB, SUM(SAL) FROM EMP GROUP BY JOB;


    • GROUP BY 절을 사용할 때 주의할 점은 SELECT 문으로 조회하는 모든 열은 GROUP BY 절에 있어야 한다는 점 입니다. 예를 들어

      • SELECT ENAME, SUM(SAL) FROM EMP GROUP BY JOB;

    • 같은 쿼리는 오류를 발생시킵니다. 왜냐하면 조회하려는 컬럼 중에 ENAME 이 있는데 GROUP BY 절에는 ENAME 컬럼이 없기 때문입니다. 하지만 반대의 경우는 이상 없습니다. 

      • SELECT SUM(SAL) FROM EMP GROUP BY JOB;

    • 이 경우는 위의 경우와 다르게 GROUP BY 절에 있는 컬럼이 조회하려는 컬럼에 적시되어 있지 않지만 전혀 문제 없이 실행됩니다.

  • GROUP BY 로 그룹화를 할 때 두 개 이상의 열을 기준으로 그룹화 하는 것도 가능합니다. 예를 들어 부서별, 직업별 월급의 총합을 구해야 할 경우에는 부서와 직업 두개의 기준을 가지고 값들을 조회해야 합니다.
    • SELECT DEPTNO, JOB, SUM(SAL) FROM EMP GROUP BY DEPTNO, JOB ORDER BY DEPTNO;


    • 위의 쿼리는 DEPTNO 기준 그리고 JOB 기준으로 그룹화 하여 SUM 함수를 실행합니다. 이처럼 GROUP BY 함수에서 앞에 있는 것 부터 그룹화를 진행합니다.


HAVING 절을 사용한 결과 제한 

  • 쿼리의 결과를 제한하기 위해서는 일반적으로 WHERE 절을 사용합니다. 하지만 GROUP BY 절을 사용할 경우에는 하나의 결과 제한할 수 있는 수단이 더 생깁니다. 

SELECT DEPTNO, JOB, SUM(SAL) 

FROM EMP 

WHERE JOB != 'CLERK' 

GROUP BY DEPTNO, JOB 

HAVING DEPTNO = 10 

ORDER BY DEPTNO;




    • WHERE 절은 그룹화를 하기 전에 조건을 통해 결과를 제한하는 역할을 하며 HAVING 절은 그룹화를 진행한 후에 결과를 제한하는 역할을 합니다. 이는 그룹함수로 계산된 값, 예를 들어 SUM(SAL) 같은 값을 제어하기 위해서는 WHERE 절이 아닌 HAVING 함수를 사용해야 합니다.






반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함