ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Oracle] GROUP BY, HAVING 절
    RDS/Oracle 2019. 3. 10. 00:11
    반응형

    집계 함수(Aggregate Function)

    1.여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수입니다.

    2.GROUP BY 절은 행들을 소그룹화 합니다.

    3.SELECT 절, HAVING 절, ORDER BY 절에 사용할 수 있습니다.


    집계 함수 종류

    COUNT(*) - NULL 값을 포함한 행의 수를 출력합니다.

    COUNT(표현식) - 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력합니다.

    SUM([DISTINCT | ALL] 표현식) - 표현식의 NULL 값을 제외한 합계를 출력합니다.

    AVG([DISTINCT | ALL] 표현식) - 표현식의 NULL 값을 제외한 평균을 출력합니다.

    MAX([DISTINCT | ALL] 표현식) - 표현식의 최대값을 출력합니다.(문자, 날짜 데이터 타입도 사용 가능)

    MIN([DISTINCT | ALL] 표현식) - 표현식의 최소값을 출력합니다.(문자, 날짜 데이터 타입도 사용 가능)


     COUNT(*) 함수에 사용된 와일드카드(*)는 전체 컬럼을 뜻하는데 전체 컬럼이 NULL인 행인 존재할 수 없기 때문에 결국 COUNT(*)는 전체 행의 개수를 출력합니다.


    집계 함수 예시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT COUNT(COMM)
      FROM EMP;
      
    SELECT COUNT(JOB)
      FROM EMP;  
     
    SELECT SUM(SAL)
      FROM EMP;
     
    SELECT AVG(SAL)
      FROM EMP;  
      
    SELECT MAX(SAL)
          , MIN(SAL)
      FROM EMP;  
     
    SELECT MAX(ENAME)
          , MIN(ENAME)
          , MAX(HIREDATE)
          , MIN(HIREDATE)
      FROM EMP;
    cs

      

    GROUP BY 절

     FROM 절과 WHERE 절 뒤에 오며, 데이터들을 작은 그룹으로 분류하여 소그룹에 대한 항목별로 통걔 정보를 얻을 때 추가로 사용됩니다. 

    1
    2
    3
    4
    5
    SELECT [DISTINCT] 컬럼명 [ALIAS명]
      FROM 테이블명
    [WHERE 조건식]
    [GROUP BY 컬럼명이나 표현식]
    [HAVING 그룹조건식];
    cs


    GROUP BY 절 예시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    -- 부서별 평균 급여 
    SELECT AVG(SAL)
      FROM EMP 
     GROUP BY DEPTNO;
     
    -- 부서별 전체 사원 인원수와 커미션을 받은 사원 인원수
    SELECT DEPTNO
          , COUNT(*)
          , COUNT(COMM)
      FROM EMP
     GROUP BY DEPTNO;
     
    -- 부서별 최대, 최소 급여
    SELECT DEPTNO
          , MAX(SAL)
          , MIN(SAL)
      FROM EMP
     GROUP BY DEPTNO;
    cs


    HAVING 절 

     WHERE 절이 SELECT 문에서 조건 검색을 위해서 사용한다면 HAVING 절은 GROUP BY 절에 의해 생성된 결과 중 원하는 조건을 검색할 때 사용됩니다. 즉, HAVING 절은 WHERE 절과 비슷하지만 그룹을 나타내는 결과 집합의 행에 조건이 적용된다는 점에서 차이가 있습니다.

     

    HAVING 절 예시

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -- 부서별 평균 급여가 2000 이상인 부서
    SELECT DEPTNO
          , AVG(SAL)
      FROM EMP 
     GROUP BY DEPTNO
     HAVING AVG(SAL) >= 2000;
     
    -- 급여가 1000 이상인 인원에 대한 평균 급여가 2000 이상인 부서 
    SELECT DEPTNO
          , AVG(SAL)
      FROM EMP 
     WHERE SAL >= 1000 
     GROUP BY DEPTNO
     HAVING AVG(SAL) >= 2000;
    cs


     

     



    반응형

    댓글

Designed by Tistory.