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절 간의 순서는 정해진 바 없다.
'개발자 양성과정 필기노트 > DB | ORACLE' 카테고리의 다른 글
테이블 복사, INSERT, UPDATE, DELETE, 트랜잭션 , 치환변수 (0) | 2021.09.13 |
---|---|
SELF JOIN, 서브쿼리 (0) | 2021.09.10 |
단일행 함수 (0) | 2021.08.25 |
WHERE절 문법 (0) | 2021.08.25 |
리눅스 터미널명령어 (0) | 2021.08.11 |
댓글