본문 바로가기
SQL

SQL_그룹함수(GROUP BY, HAVING)

by 유서담 2023. 12. 14.

그룹함수 ( GROUP BY )

 

  • 조회된 행들의 집합그룹에 적용되어 하나의 결과를 생성하는 함수

 

집합그룹 : 테이블 전체 또는 그룹화된 테이블의 행들

집합그룹의 예시 : 사원테이블전체 혹은 부서별 평균임금 / 직종별 전체 급여 / 관리자별 관리직원수 / 입사년도별 입사한 사원수 / 급여등급별 사원수 등

 

 

그룹함수 사용시 주의사항

  • 그룹함수는 WHERE절에서 사용할 수 없다
  • 그룹함수와 그룹함수가 아닌 표현식을 SELECT절에 같이 적을 수 없다
  • 그룹함수의 중첩은 한번만 허용된다
  • GROUP BY절에 등장한 표현식은 그룹함수와 같이 SELECT절에 적을 수 있다

 

그룹함수의 종류

 

  • COUNT(*) : 조회된 모든 행의 갯수를 반환한다
  • COUNT(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값이 NULL이 아닌 행의 갯수를 반환한다
  • SUM(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 합계를 반환한다 ( NULL은 무시한다 )
  • AVG(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 평균을 반환한다 ( NULL은 무시한다 )
  • MIN(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 최소값을 반환한다 ( NULL은 무시한다 )
  • MAX(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 최대값을 반환한다 ( NULL은 무시한다 )
  • VARIANCE(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 분산을 반환한다 ( NULL은 무시한다 )
  • STDDEV(컬럼 혹은 표현식) : 조회된 행에서 지정된 컬럼의 값의 표준편차를 반환한다 ( NULL은 무시한다 )

 

 

테이블의 행을 그룹화하기

  • GROUP BY 절을 사용해서 지정된 컬럼의 값이 같은 값을 가지는 행끼리 그룹화할 수 있다
  • GROUP BY절은 행 그룹화 기준을 결정하는 값을 가진 컬럼을 지정한다
  • GROUP BY절에 지정한 컬럼은 SELECT절에서 그룹함수와 같이 사용할 수 있다
  • SELECT 절에서 사용된 그룹함수는 GROUP BY로 그룹화된 각각의 그룹마다 실행된다

 

GROUP BY절의 작성 규칙

  select 컬럼혹은표현식, 그룹함수(), 그룹함수()
  from 테이블명
  [where 조건식]
  [group by 컬럼혹은표현식]
  [order by 컬럼명]

 

 

그룹함수 실행결과를 필터링하기

 

  • HAVING절은 GROUP BY절을 사용해서 행을 그룹화하고, 각 그룹에 그룹함수를 실행한 결과를 필터링할 때 사용한다
    • 일반적으로 행을 필터링할 때는 WHERE절을 사용한다
  • WHERE와 HAVING의 차이
    • WHERE 
      • 행을 필터링한다
      • 그룹함수를 조건식에 사용할 수 없다
    • HAVING
      • 그룹화된 그룹에 그룹함수 적용한 후에 계산된 결과로 필터링을 한다
      • 그룹함수를 조건식에 사용할 수 있다

 

HAVING절의 작성규칙

  select column, 그룹함수
  from table
  [where  조건식]
  [group by 컬럼혹은표현식]
  [having 그룹함수적용결과를 필터링하는 조건식]
  [order by 컬럼]

 

  -- 소속부서별로 사원수를 집계했을 때, 사원수가 5명 미만인 부서의 아이디와 사원수를 조회하기
  select department_id, count(*)
  from employees 
  group by department_id
  having count(*) < 5

 

 

 

GROUP BY 사용예시

 

아직 GROUP BY에 대한 이해가 깊지 못해서  부서별로 / 그룹별로 하는건 GROUP BY를 사용하는걸로 이해해야겠다

 

 

GROUP BY를 사용 및 결과 출력

 

 

 

 

HAVING 사용예시

 

 

'SQL' 카테고리의 다른 글

SQL_DDL과 정규화  (1) 2023.12.18
SQL_서브쿼리  (1) 2023.12.17
SQL_Join  (0) 2023.12.13
SQL_오라클 내장함수(변환함수, 기타함수)  (0) 2023.12.12
SQL_오라클 내장함수 (문자함수, 숫자함수, 날짜함수)  (1) 2023.12.11