오라클, SQL집합 함수(Aggreation Function), COUNT, AVG, MAX, MIN, SUM, GROUP BY, HAVING, ROLLUP, CUBE, GROUPING SETS
http://ojc.asia/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=610
행(ROW)들의 집합에 대해 연산을 하는 것이므로 행들의 집합 수 만큼 결과가 반환된다. 테이블은 GROUP BY절에 의해 그룹으로 나누어 질 수 있으며 그룹함수(Aggregation Function)는 SELECT문과 HAVING절에 사용 되어 질 수 있다. HAVING절은 GROUP BY 되는 함수에 조건을 주기 위해서 사용 되며 WHERE 절을 이용해서는 안 된다.(그룹핑 칼럼에 조건을 주는 경우는 WHERE절, HAVING절 모두에서 사용가능 하다.)
GROUP BY절을 이용하여 한 테이블에서 행들을 원하는 그룹으로 나누는 것이 가능하며 칼럼 명을 집합 함수와 SELECT절에 이용하고자 한다면 GROUP BY 뒤에 칼럼을 추가 해야 한다. 즉 SELECT절에 그룹함수가 오면 SELECT절의 나머지 칼럼은 GROUP BY절에 나타나야 한다. 또한 GROUP BY절에는 칼럼의 위치 순서 표기(1, 2, 3,,,)나 칼럼 Alias는 사용 할 수 없다.
[형식]
SELECT column, group function
FROM TABLE
[WHERE condition]
[GROUP BY [ROLLUP | CUBE] group by expression]
[HAVAING group condition]
[ORDER BY columns]
AVG([DISTINCT|ALL n] : n의 평균값을 반환한다.
COUNT({* | [DISTINCT|ALL] expr}) : 추출된 행(ROW)수를 반환한다. DISTINCT를 사용 했다면 중복된 행을 제거한 행수를 반환하고 ,expr을 사용 했다면 expr이 NOT NULL인 행의 수를 반환한다. ASTERISK(*)는 중복 과 NULL을 포함한 모든 행의 수를 반환 할 때 사용한다.
MAX, MIN함수는 숫자, 문자, 날짜 등 어떠한 자료형 이라도 사용이 가능하다.
MAX([DISTINCT|ALL] expr) : 최대값을 반환한다.
MIN([DISTINCT|ALL] expr) : 최소값을 반환한다.
SUM([DISTINCT|ALL] n) : 합계를 반환한다. 인수 n은 테이블의 숫자형 칼럼 이어야 하며 값에 NULL이 포함되어 있을 때는 합계에 포함되지 않는다.
Oracle10g R2부터 Group By절에 의한 자동정렬이 안되는 이유
ROLLUP 연산자 : GROUP BY구에서 사용되는 연산자로써 그룹조건에 따라 전체를 그룹핑하고 부분합을 구하는 연산자이다. GROUP BY에 사용된 칼럼수가 N이면 ROLLUP에 의해 생성되는 그룹조합은 N+1개.
CUBE 연산자 : GROUP BY구에서 사용되는 연산자로써 그룹조건에 따라 전체를 그룹핑하고 모든 가능한 부분합을 구하는 연산자이다. GROUP BY에 사용된 칼럼수가 N이면 ROLLUP에 의해 생성되는 그룹조합은 2N개.
GROUPING(expr) : expr로 지정된 칼럼이 ROLLUP 또는 CUBE 연산자로 생성된 그룹에서 사용되었는지의 여부를 사용 되었으면 0, 사용되지 않았으면 1로 표시한다.
GROUPING SETS(expr1, expr2, expr3,,,) : GROUP BY의 집합을 구성한다.(multiple group by)
GROUP BY GROUPING SETS(a,b) à group by a
union all
group by b
GROUP BY GROUPING SETS(a, rollup(b)) à group by a
Union all
Group by rollup(b)