본문 바로가기
개발자 양성과정 필기노트/DB | ORACLE

그룹함수 , GROUP BY절, HAVING절

by jono 2021. 9. 7.

DB  ||  DAY9  ||  그룹함수 , GROUP BY절, HAVING절


 1. 그룹함수 

하나의 컬럼 전체를 조작하는 함수.

모든 그룹함수는 null값에 대해서는 작업을 하지 않는다!

 

1) AVG( 컬럼명 )   -  평균 

- 숫자데이터만 가능함.

 

2) SUM( 컬럼명 ) - 합계 

- 숫자데이터만 가능함.

 

3) MAX( 컬럼명 ) - 최대

- 날짜 데이터의 경우, 가장 최근의 날짜를 반환함.

 

4) MIN( 컬럼명 ) - 최소

- 날짜데이터의 경우, 가장 과거의 날짜를 반환함.

 

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%' ;

 

5) COUNT( 컬럼명 )

- 해당 컬럼의 행의 숫자를 센다.

  • 해당 컬럼에 NULL 이 있다면 -> NULL 행은 제외하고 수를 센다.
  • COUNT( * ) -> NULL 상관없이 모든 컬럼의 행의 수를 셈
  • COUNT( distict 컬럼명 ) -> 해당 컬럼에서 중복되는 데이터를 제외한 행의 수를 센다.

 

6) STDDEV( 컬럼명 )

표준편차를 구함

 

7) VARIANCE( 컬럼명 )

분산을 구함

 


 2. GROUP BY( 컬럼 ) 

  • '컬럼'의 데이터를 기준으로, 공통된 데이터끼리 그룹화를 수행한다.
  • WHERE절 다음에 온다
  • SELECT 문에 (그룹함수에 포함되어있지 않은 컬럼) (그룹함수에 포함되어있는 컬럼)을 함께 디스플레이하려면,
    반드시 group by절에는 '그룹함수에 포함되어있지 않은 컬럼'이 와야한다.
SELECT department_id, AVG( salary )
FROM employees
GROUP BY department_id ;

// 동일한 department_id 를 가진 salary데이터들의 평균을 구한다.
  • SELECT 문에 여러개의 컬럼을 선택하는경우 오류해결법
    GROUB BY절에도 컬럼을 여러개 사용하고,
    ORDER BY로 정렬하면 됨.
SELECT department_id, job_id AVG( salary )
FROM employees
GROUP BY department_id,  job_id
ORDER BY deparment_id
// department_id의 같은 데이터끼리 그룹묶고, 그 중에서도 같은 job_id끼리 묶어 deparment_id기준으로 정렬함

 3. HAVING( 컬럼 ) 

  • '행 그룹'을 제한하는 조건문을 작성한다.
  • WHERE절은 '행'을 제한하는 조건문이라는 점에서 차이점이 있다.
  • 즉, HAVING절에서는 그룹함수를 사용할 수 있다.
SELECT job_id, SUM(salary) as PAYROLL
FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary) ;

 

*** GROUP BY절과 HAVING절 간의 순서는 정해진 바 없다.

댓글