나의 개발일지

[SQL] 그룹 함수 본문

Oracle SQL

[SQL] 그룹 함수

YoonJuHan 2023. 4. 16. 12:36

그룹 함수의 개념

  1. 행 집합에 작용하여 그룹 당 하나의 결과를 생성
  2. 행 집합은 테이블 전체 혹은 WHERE 절의 조건에 의해 선택된 행들이 하나의 그룹
  3. 선택된 행들에 대하여 하나의 그룹으로 처리되기 때문에 그룹 함수의 결과는 항상 단일 행
  4. 구문
SELECT group_function(column), ...
FROM table
[WHERE 조건(s)];

 

그룹 함수의 종류

  1. COUNT
  2. MIN
  3. MAX
  4. AVG
  5. SUM

SUM, AVG 함수

  1. 숫자 데이터를 저장하는 열에 대해 선택된 데이터들의 합계와 평균을 구한다.
  2. 예) SUM(salary), AVG(salary)

MIN, MAX 함수

  1. 모든 데이터 타입에 사용 가능
  2. 선택된 열에 대한 최솟값, 최댓값을 구한다.
  3. 예) MIN(salary), MAX(salary), MIN(hiredate), MAX(hiredate), MIN(emp_name), MAX(emp_name)

COUNT  함수

  1. 행의 개수를 반환하는 함수로 세 가지 표현식이 가능
    1.  COUNT(*)
      • NULL 값이 있는 행 및 중복 행을 포함
      • 테이블에서 SELECT 문의 WHERE 조건을 만족하는 행 수를 반환
    2. COUNT(expr)
      • 열에 NULL이 아닌 행 수를 반환
    3. COUNT(DISTINCT expr)
      • expr로 식별되는 열에서 중복되지 않고 NULL이 아닌 값의 수를 반환
  2. 예) COUNT(*), COUNT(dept_id), COUNT(DISTINCT dept_id)

그룹 함수와 널값

  1. COUNT(*)를 제외한 그룹 함수의 결과에 널값은 제외
  2. 널값이 포함된 행을 그룹 함수 결과에 포함하기 위해 NVL 함수 사용
  3. 예) AVG(comm), AVG(NVL(comm, 0))

 

  • Y_EMP 테이블의 모든 사원들에 대한 급여의 합계, 평균, 최대 급여, 최소 급여를 표시
SELECT SUM(salary), AVG(salary), MAX(salary), MIN(salary)
FROM y_emp;

 

  • Y_EMP 테이블을 사용하여 가장 오래전에 입사한 사원과 가장 최근에 입사한 사원의 입사일 표시
  • 가장 오래전 입사한 사원은 97/06/17로 숫자가 가장 낮음으로 MIN을 사용, 가장 최근은 MAX
SELECT MIN(hiredate), MAX(hiredate)
FROM y_emp;

 

  • COUNT 함수를 실행하여 여러 가지 결과를 비교
  • 아직 부서가 NULL인 사원이 있기 때문에 결과에서 COUNT(dept_id)의 값이 COUNT(*) 보다 적게 반환
SELECT COUNT(*), COUNT(dept_id), COUNT(DISTINCT dept_id)
FROM y_emp;

 

  • 첫 번째 평균은 테이블의 모든 행을 기반으로 계산되며, 모든 사원이 받는 커미션 총액을 회사 전체 사원 수로 나눈다.
  • 두 번째 평균은 커미션을 받는 사원들만의 평균이다.
SELECT AVG(NVL(comm, 0)), AVG(comm)
FROM y_emp;

'Oracle SQL' 카테고리의 다른 글

[SQL] GROUP BY 절의 추가 기능 (ROLLUP, CUBE, GROUPING SETS)  (0) 2023.04.16
[SQL] GROUP BY, 그룹 결과 정렬, HAVING 절  (0) 2023.04.16
[SQL] 조건 표현식  (0) 2023.04.14
[SQL] 일반 함수  (0) 2023.04.14
[SQL] 함수의 중첩  (0) 2023.04.14
Comments