[오라클SQL과PLSQL을다루는기술]5. 그룹 쿼리와 집합 연산자
COUNT(expr)
- NULL이 아닌 ROW수만 반환
- COUNT(*) : 전체 로우 반환(NULL 포함)
SUM(expr)
AVG(expr)
MIN(expr), MAX(expr)
VARIANCE(expr), STDDEV(expr)
GROUP BY, HAVING
ROLLUP, CUBE
- ROLLUP(expr1, expr2, ...) : expr로 명시한 표현식 기준으로 집계한 결과 뿐 아니라 추가적인 집계 정보도 보여준다.
레벨별로 집계한 결과 반환. 표현식 개수가 n개이면 n+1 레벨까지 하위 레벨에서 상위 레벨 순으로 데이터 집계
- CUBE(expr1, expr2, ...) : ROLLUP이 레벨별로 순차적 집계를 했다면, CUBE는 명시한 표현식의 모든 경우의 수를 조합 별로 집계한 결과를 반환. 2^(expr개수) 만큼 종류별로 집계
표현식 | 집계 종류 |
ROLLUP(expr1, expr2) | expr1 + expr2 |
expr1 | |
전체 | |
GROUP BY expr1, ROLLUP(expr2, expr3) | expr1 + (expr2 + expr3) |
expr1 + (expr2) | |
expr1 | |
GROUP BY ROLLUP(expr1), expr2 | expr2 + expr1 |
expr2 | |
CUBE(expr1, expr2) | expr1 + expr2 |
expr1 | |
expr2 | |
전체 | |
GROUP BY expr1, CUBE(expr2, expr3) | expr1 + (expr2 + expr3) |
expr1 + (expr2) | |
expr1 + (expr3) | |
expr1 |
UNION, UNION ALL
- UNION은 중복 제거
- UNION ALL은 중복 포함
MINUS
INTERSECT
※ 집합 연산자 제한사항
1) 각 SELECT문의 리스트 개수와 데이터 타입이 일치해야 한다
2) ORDER BY절은 맨 마지막 문장에서만 사용가능
3) BLOB, CLOB, BFILE 타입 컬럼은 집합 연산자 사용 불가
4) UNION, INTERSECT, MINUS 연산자는 LONG형 컬럼에서 사용 불가
GROUPING SETS
- GROUP BY GROUPING SETS(expr1, expr2, expr3) : (GROUP BY expr1) UNION ALL (GROUP BY expr2) UNION ALL (GROUP BY expr3)