ORACLE DB/기초

OracleDB 집계함수란?

chief_sac 2021. 7. 29.
반응형

 

 

개념


  • 한 테이블의 데이터들을 특정 컬럼을 기준으로 그룹화하고 각 그룹 내의 데이터에 대하여 집계처리(합계, 평 군, 개수, 최댓값, 최솟값)
  • SUM, AVG, COUNT, MIN, MAX, 등 정도로 나눠서 볼 수 있다.
  • SELECT 절에 집계 함수와 일반컬럼이 같이 사용되면 반드시 GROUP BY 절이 기술되어야 함 --일반컬럼이 기준이 되어서 그룹을 만든다.

 

  • 사용 형식
    SELECT [컬럼명1,..,..N]
    SUM(컬럼명)|COUNT(*|컬럼명)|AVG(컬럼명)|MAX(컬럼명)|MIN(컬럼명)
    FROM 테이블명
    [WHERE 조건]
    [GROUP BY 컬럼명1,..N]
    [HAVING 조건]
    [ORDER BY 컬러명|컬럼인덱스];
더보기
  •  SELECT 절에서 '[컬럼명1,..,]'이 생략되면 GROUP BY절이 필요 없음(테이블 전체가 하나의 그룹)
  • '[GROUP BY 컬럼명1,..]' 에 기술되는 컬럼명은 SELECT절에서 사용된 집계함수 이외의 컬럼명을 기술하고 필요에 따라 SELECT절에서 기술하지 않은 컬럼도 기술 가능
  • 'GROUP BY' 다음에 기술되는 컬럼의 순서는 그룹핑 되는 순서임
  • '[HAVING 조건]' : 집계함수 자체에 조건이 부여된 경우 사용

 

 

1. SUM(column)


  • 'column'에 저장된 각 그룹별 합계를 구하여 반환 예) 사원 테이블에서 전체 사원들의 급여 합계를 구하시오 SELECT SUM(SALARY) FROM EMPLOYEES;
  • 예시)
    예)사원테이블에서 각 부서별 평균 급여를 소수 1자리까지 구하시오
    SELECT DEPARTMENT_ID AS 부서코드,
    -- EMP_NAME AS 사원이름,
    ROUND(AVG(SALARY),1)
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID --EMP_NAME
    ORDER BY DESC;​

 

 

2. COUNT(*|column)


  • 그룹으로 묶인 각 그룹에 포함된 자료 수(행의 수)
  • 외부 조인에 COUNT함수를 사용할 경우 '*' 대신 컬럼명을 사용해야 함
  • 예시)
    예)사원테이블에서 각 부서별 인원수를 구하시오
    SELECT DEPARTMENT_ID AS 부서코드,
    COUNT(*) AS 인원수,
    COUNT(EMP_NAME) AS 사원수
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID
    ORDER BY DESC;​

 

 

3. AVG(column)


  • 'column'을 기준으로 그룹으로 묶인 집단에 대한 평균값 반환
  • 예시)
    예)사원테이블에서 각 부서별 평균 급여를 소수 1자리까지 구하시오
    SELECT DEPARTMENT_ID AS 부서코드,
    -- EMP_NAME AS 사원이름,
    ROUND(AVG(SALARY),1)
    FROM EMPLOYEES
    GROUP BY DEPARTMENT_ID --EMP_NAME
    ORDER BY DESC;​

 

 

4. MAX(column), MIN(column)


  • 'coloumn'으로 기술 컬럼에 저장된 값 중 최댓값과 최솟값을 구하여 반환
  • 내부적으로 계산하는 방식은 'column'을 기준으로 오름차순 정렬(MIN), 또는 내림차순 정렬 후 그중 첫 번째 행의 값을 반환 따라서 처리시간이 다소 많이 소요됨
  • ** 의사컬럼 ROWNUM
  • 쿼리 결과(뷰)의 각행에 부여된 순번 값
  • 상위 5개 또는 하위 5개 등 필요한 개수의 결과만을 출력할 때 사용(다른 DBMS에서는 TOP 함수로 제공됨)
  • 예시)
    예)회원의 마일리지 중 최대마일리지 값을 구하시오
    SELECT MAX(MEM_MILEAGE)
    FROM MEMBER;
    
    SELECT MEM_MILEAGE
    FROM MEMBER
    ORDER BY  DESC;​
반응형

댓글0