GROUP BY
- 보통 검색 된 여러 행을 이용하여 통계 정보를 계산하는데 쓰임
- NULL 값은 무시하고 연산
- GROUP BY절에 명시 된 컬럼은 SELECT절에 기술해주는 것이 올바른 형태
(없다면 어디서 그룹화한건지, 제목이 없으니 없는 것이나 마찬가지)
기본 문법
SELECT 컬럼, 그룹함수(컬럼)
FROM 테이블
[WHERE 조건]
GROUP BY 그룹대상
[ORDER BY 정렬대상 [ASC/DESC]]
컬럼이 오고 그룹 함수가 SELECT절에 있으나 GROUP BY절에 컬럼이 없으면 에러가 발생한다
숫자 데이터 입력 받는 함수
AVG ( [DISTINCT | ALL] n ) - 평균
STDDEV ( [DISTINCT | ALL] n ) (Standard Deviation) - 표준편차, 중심에서 관측치가 얼마나 떨어져 있는가?
SUM ( [DISTINCT | ALL] n ) - 합계
VARIANCE ( [DISTINCT | ALL] n ) (Variance) - 분산, 그 확률 변수가 기댓값으로 부터 얼마나 떨어진 곳에 분포하는가?
데이터 타입 상관없이 입력 받는 함수
COUNT ( * | [DISTINCT | ALL] expr ) - 갯수
MAX ( [DISTINCT | ALL] expr ) - 최대값
MIN ( [DISTINCT | ALL] expr ) - 최소값
예제1
GROUP BY department_id
같은 department_id의 값을 가진 사원들은 하나의 그룹을 묶는다
예제2
GROUP BY department_id, job_id
department_id와 job_id 컬럼의 값이 모두 일치하는 사원들을 하나의 그룹으로 묶는다
HAVING
- WHERE절과 동일하지만 그룹 함수를 포함한 조건은 HAVING절을 사용한다
- GROUP BY절 뒤에 기술한다
- 그룹 함수를 포함해야 한다 (WHERE절 처럼 컬럼명으로만 조건식을 만들 수 없음)
기본 문법
SELECT 컬럼, 그룹함수(컬럼)
FROM 테이블
[WHERE 조건]
GROUP BY 그룹대상
HAVING 그룹함수포함조건
[ORDER BY 정렬대상 [ASC/DESC]]
예제
HAVING MIN(salary) > 5000
그룹들 중 가장 작은 급여가 5000을 초과하는 그룹만 선택하여 출력한다
'BackEnd > DataBase - Oracle' 카테고리의 다른 글
[Oracle] 서브 쿼리(Sub Query) (0) | 2020.02.13 |
---|---|
[Oracle] JOIN과 Self-Join (0) | 2020.02.13 |
[Oracle] 변환 함수 (0) | 2020.02.12 |
[Oracle] 날짜 함수 (0) | 2020.02.12 |
[Oracle] 숫자 함수 (0) | 2020.02.12 |