집단 함수
집단 함수는 하나 이상의 로우로부터 컬럼 값을 파라미터로 입력받는 함수이다. 함수의 파라미터는 반드시 컬럼 값만 입력받는 것은 아니고 실제 데이터를 직접 입력으로 받을 수도 있다. 집단 함수는 SELECT 문의 SELECT 절, GROUP BY 절, HAVING 절에만 포함된다.
Tibero에서 제공하는 집단 함수에는 AVG, COUNT, MAX, MIN, SUM 등이 있다. 이러한 함수는 각각 파라미터로 주어진 컬럼에 대하여 평균, 개수, 최댓값, 최솟값, 합계 등을 구한다. 만약 파라미터로 실제 데이터 값이 주어지면 그 값을 그대로 반환한다.
SELECT 절
SELECT 문에서 SELECT 절의 집단 함수는 중첩될 수 있다. 단, 다른 위치의 집단 함수는 중첩되면 안 된다. 또한, SELECT 절의 집단 함수도 한 번의 중첩만을 허용한다.
따라서, 다음과 같은 집단 함수는 에러를 반환한다.
COUNT(SUM(AVG(SALARY)))
중첩된 집단 함수의 계산은 먼저 각 그룹에 대한 안쪽의 집단 함수를 계산하고, 여기에서 반환된 모든 값에 대하여 바깥쪽의 집단 함수를 계산한다. 예를 들어 SUM(AVG(SALARY)) 함수는 모든 그룹으로부터 SALARY 컬럼 값의 평균을 구하고, 그다음 모든 평균값의 합계를 구하여 반환한다.
집단 함수의 괄호 내에는 조건식이 아닌 임의의 연산식이 올 수 있다. SELECT 문에서 SELECT 절의 집단 함수는 다른 집단 함수를 포함하는 연산식이 올 수도 있다.
따라서, 다음과 같은 집단 함수도 유효하다.
SUM(AVG(SALARY) * COUNT(EMPNO) + 1.10)
COUNT 함수는 괄호 안에 애스터리스크(*)가 올 수도 있다. 이 경우 특정 컬럼이 아닌 전체 로우의 개수를 반환한다.
로우를 하나도 포함하지 않는 빈 테이블에 대해 집단 함수를 포함하는 SELECT 문을 실행하면, 결과 로우가 하나도 반환되지 않는다. 예외적으로, SELECT 절에 COUNT(*) 함수를 포함하면 0 값의 컬럼을 갖는 하나의 로우가 반환된다.
GROUP BY 절
집단 함수는 대개 SELECT 문 내에서 GROUP BY 절과 함께 사용한다. 집단 함수는 GROUP BY 절에 의하여 분리된 각 그룹에 포함된 모든 로우에 대하여 하나의 값을 반환한다. 만약 SELECT 문에서 GROUP BY 절을 포함하지 않으면, 전체 테이블을 하나의 그룹으로 인식한다.
다음의 SELECT 문은 GROUP BY 절을 포함한 예이다.
SELECT AVG(SALARY) FROM EMP
GROUP BY DEPTNO;
위의 문장은 테이블 EMP 내의 모든 로우 중에서 같은 DEPTNO 컬럼 값을 갖는 로우의 그룹으로 분리하고, 각 그룹에 포함된 모든 직원의 SALARY 컬럼 값의 평균을 계산한다.
HAVING 절
SELECT 문에서 HAVING 절은 그룹에 대한 조건식을 포함한다. HAVING 절은 SELECT 절이나 GROUP BY 절에 포함된 컬럼 또는 그 이외의 컬럼에 대한 집단 함수를 포함할 수 있다.
다음의 SELECT 문은 HAVING 절을 포함한 예이다. 본 예제에서는 3명 이상의 직원이 소속된 부서에 대해서만 SALARY 컬럼 값의 평균을 계산한다.
SELECT AVG(SALARY) FROM EMP
GROUP BY DEPTNO
HAVING COUNT(EMPNO) >= 3;
집단 함수의 파라미터 앞에는 DISTINCT 또는 ALL 예약어를 포함시킬 수 있다. 이러한 예약어는 중복되는 컬럼 값에 대한 처리를 정의하며, DISTINCT는 중복을 제거하고, ALL은 중복을 허용한다.
예를 들어 한 그룹 내의 로우가 갖고 있는 SALARY 컬럼 값이 20000, 20000, 20000, 40000이라면, AVG(DISTINCT SALARY) 함수의 결과는 30000이며, AVG(ALL SALARY) 함수의 결과는 25000이다. 만약 아무 것도 지정하지 않으면 디폴트는 ALL이다.
다음의 표는 Tibero에서 제공하는 집단 함수 목록이다.
집단 함수의 파라미터 앞에는 DISTINCT 또는 ALL 예약어를 포함시킬 수 있다. 이러한 예약어는 중복되는 컬럼 값에 대한 처리를 정의하며, DISTINCT는 중복을 제거하고, ALL은 중복을 허용한다.
예를 들어 한 그룹 내의 로우가 갖고 있는 SALARY 컬럼 값이 20000, 20000, 20000, 40000이라면, AVG(DISTINCT SALARY) 함수의 결과는 30000이며, AVG(ALL SALARY) 함수의 결과는 25000이다. 만약 아무 것도 지정하지 않으면 디폴트는 ALL이다.
다음의 표는 Tibero에서 제공하는 집단 함수 목록이다.
AVG | 그룹 내의 모든 로우에 대한 expr 값의 평균을 구하는 함수이다. |
CORR | 파라미터로 주어진 expr1가 expr2의 상관계수를 계산하는 함수이다. |
COUNT | 쿼리가 반환하는 로우의 개수를 세는 함수이다. |
COVAR_POP | expr1, expr2의 모공분산을 계산하는 함수이다. |
COVAR_SAMP | expr1, expr2의 표본공분산을 계산하는 함수이다. |
DENSE_RANK | 각 그룹별로 로우를 정렬한 다음 그룹 내의 각 로우에 대한 순위를 반환하는 함수이다. |
FIRST | 정렬된 로우에서 처음에 해당하는 로우를 뽑아내어 명시된 집단함수를 적용한 결과를 반환한다. |
LAST | 정렬된 로우에서 마지막에 해당하는 로우를 뽑아내어 명시된 집단함수를 적용한 결과를 반환한 다. |
MAX | 그룹 내의 모든 로우에 대한 expr 값 중의 최댓값을 구하는 함수이다. |
MIN | 그룹 내의 모든 로우에 대한 expr 값 중의 최솟값을 구하는 함수이다. |
PERCENT_RANK | 파라미터로 주어진 값의 그룹 내의 위치를 나타내 주는 함수이다. |
PERCENTILE_CONT | 연속 분포 모델에서 파라미터로 주어진 백분위 값에 해당하는 값을 계산하는 역 분포 함수이다. |
PERCENTILE_DISC | 이산 분포를 가정한 역분산 함수로 분석 함수로도 사용할 수 있다. |
RANK | 그룹별로 로우를 정렬한 후 그룹 내의 각 로우의 순위를 반환하는 함수이다. |
REGR_SLOPE REGR_INTERCEPT REGR_COUNT REGR_R2 REGR_AVGX REGR_AVGY REGR_SXX REGR_SYY REGR_SXY |
임의의 수치 데이터 쌍의 집합에 가장 맞는 선형 방정식을 구하기 위해 사용된다. |
STDDEV | expr의 표본 표준편차를 반환하는 함수이다. |
STDDEV_POP | expr의 모표준편차를 반환하는 함수이다. |
STDDEV_SAMP | expr의 누적 표본 표준편차를 반환하는 함수이다. |
SUM | 그룹 내의 모든 로우에 대한 expr 값의 합계를 구하는 함수이다. |
VARIANCE | expr의 분산을 반환한다. |
VAR_POP | expr의 모분산을 반환한다. |
VAR_SAMP | expr의 표본분산을 반환하는 함수이다. |
XMLAGG | XML 조각을 받고, 이를 한데 모아 XML 문서로 만들어 반환하는 함수이다. |
'기술' 카테고리의 다른 글
CMD창에서 입력한 명령어 히스토리(history) 로 불러오기 doskey (0) | 2023.05.03 |
---|---|
티베로 티어드민(tAdmin) DB연결접속 정보 불러와 저장하기 Configuration Export/Import (0) | 2023.03.05 |
웹 색상표 코드값(256 컬러,RGB) (2) | 2022.12.14 |
티베로(Tibero) TAdmin 쿼리 일괄 주석 단축키 (0) | 2022.11.26 |
티베로(Tibero)제공 함수 정리 - 티멕스 제공 (0) | 2022.11.25 |