공부/데이터베이스

[오라클로 배우는 데이터베이스 입문] 07. 다중행 함수와 데이터 그룹화

losey_J 2022. 3. 26. 20:35

1. 하나의 열에 결과를 출력 결과를 담는 다중행 함수

함수 설명
SUM 지정한 데이터의 합 변환
COUNT 지정한 데이터의 개수 반환
MAX 지정한 데이터 중 최댓값 반환
MIN 지정한 데이터 중 최솟값 반환
AVG 지정한 데이터의 평균값 반환

- 합계를 구하는 SUM 함수

SUM([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[합계를 구할 열이나 연산자, 함수를 사용한 데이터(필수)])

※ 분석용도로 사용 시 
SUM([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[합계를 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석을 위한 여러 문법을 지정)(선택)

- 데이터 개수를 구해 주는 COUNT 함수

COUNT([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[개수를 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석을 위한 여러 문법을 지정)(선택)

※ *을 사용하면 SELECT문의 결과 값으로 나온 행 데이터의 개수를 반환함

- 최댓값과 최솟값을 구하는 MAX, MIN 함수

MAX([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[최댓값을 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석을 위한 여러 문법을 지정)(선택)

MAX([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[최솟값을 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석을 위한 여러 문법을 지정)(선택)

- 평균 값을 구하는 AVG함수

AVG([DISTINCT, ALL 중 하나를 선택하거나 아무 값도 지정하지 않음(선택)]
[평균을 구할 열이나 연산자, 함수를 사용한 데이터(필수)])
OVER(분석을 위한 여러 문법을 지정)(선택)

부서번호가 30인 사원들의 평균 급여 출력하기/ DISTINCT로 중복 제거한 평균

2. 결과 값을 원하는 열로 묶어 출력하는 GROUP BY절

SELECT [조회할 열1 이름], [열2 이름], ... , [열N 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY [그룹화할 열을 지정(여러개 지정 가능)] --- 특정 열 또는데이터를 기준으로 데이터를 그룹으로 묶음
ORDER BY [정렬하려는 열 지정];
※ GROUP BY절에 명시하는 열은 여러개 지정 가능

유의점: GROUP BY절에 명시하지 않은 열은 SELECT절에 사용할 수 없음

 

3. GROUP BY절에 조건을 줄 때 사용하는 HAVING절

SELECT [조회할 열1 이름], [열2 이름], ... , [열N 이름]
FROM [조회할 테이블 이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY [그룹화할 열을 지정(여러개 지정 가능)]
HAVING [출력 그룹을 제한하는 조건식] --- GROUP BY절을 사용해 그룹화된 결과 중 출력 그룹을 선별하는 조건식을 지정
ORDER BY [정렬하려는 열 지정];

유의점
WHERE절 - 출력 대상 행을 제한
HAVING절 - 그룹화된 대상을 출력에서 제한

4. 그룹화와 관련된 여러 함수(실무에는 자주 사용되지 않으므로 참고만 할 것)

- ROLLUP, CUBE 함수: 그룹화 데이터의 합계출력 시 유용

GROUP BY ROLLUP
GROUP BY CUBE

- GROUPING SETS 함수: 같은 수준의 그룹화 열이 여러 개일 때 각 열별 그룹화를 통해 결과 값을 출력

GROUP BY GROUPING SETS[그룹화 열 지정(여러 개 지정가능)];

- 그룹화 함수

- GROUPING 함수: 그룹화 대상으로 지정한 열이 그룹화된 상태로 결과가 집계되었는 지 확인하는 데 사용

SELECT [조회할 열1 이름], [열2 이름], ... , [열N이름]
GROUPING [GROUP BY절에 ROLLUP 또는 CUBE에 명시한 그룹화 할 열 이름] - 그룹화 대상 열의 그룹화가 이루어진 상태의 집계인지 여부
FROM [조회할 테이블이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY ROLLUP 또는 CUBE [그룹화할 열]

GROUPING열 데이터값이 0이면 그룹화 상태/1이면 그룹화 하지 않은 상태
DECODE문으로 GROUPING 함수를 적용하여 결과 표기하기

-  GROUPING_ID 함수: 그룹화 여부 검사할 열을 한번에 여러 열 지정

SELECT [조회할 열1 이름], [열2 이름], ... , [열N이름]
GROUPING_ID [그룹화 여부 확인할 열(여러 개 지정 가능)]
FROM [조회할 테이블이름]
WHERE [조회할 행을 선별하는 조건식]
GROUP BY ROLLUP 또는 CUBE [그룹화할 열]
※ GROUPING_ID 함수 결과는 그룹화 비트 벡터값으로 나타냄

 

- LISTAGG 함수 : 그룹에 속해 있는 데이터를 가로로 나열할 때 사용

SELECT [조회할 열1 이름], [열2 이름], ... , [열N이름]
LISTAGG([나열할 열(필수)], [각 데이터를 구분하는 구분자(선택)])-구분자 지정안할 경우 NULL이 기본값
WITHIIN GROUP(ORDER BY 나열할 열의 정렬 기준 열(선택))
FROM [조회할 테이블이름]
WHERE [조회할 행을 선별하는 조건식]

LISTAGG사용 전/사용 후

- PIVOT, UNPIVOT 함수: 기존 테이블 행을 열로 바꿈, 열을 행으로 바꿈

PIVOT 사용 전후