Oracle

[오라클SQL과PLSQL을다루는기술]5. 그룹 쿼리와 집합 연산자

지금이니! 2020. 5. 9. 17:46

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)