DB/ORACLE

15.[오라클]그룹쿼리관련 정리

혼자좀비 2024. 2. 7. 15:41
함수 설명 예시
GROUP BY 그룹으로 묶어서 데이터를 집계할때 사용한다. SELECT department_id, SUM(salary)
  FROM employees
 GROUP BY department_id
 ORDER BY department_id;  

 -> GROUP으로 묶여져서 집계된다.
HAVING GROUP BY결과를 대상으로 다시
필터를 걸어 데이터를 추출할때 쓴다.
SELECT
  period
, region
, SUM(loan_jan_amt) totl_jan
FROM kor_loan_status
 WHERE period = '201311' 
 GROUP BY period, region
 HAVING SUM(loan_jan_amt) >100000
 ORDER BY period, region;  

-> HAVING절은 WHERE조건을 처리한 결과에
대해 GROUP BY를 수행 후 산출된 결과에 대해 다시 조건을 걸어 데이터를 걸러낸다
ROLLUP(exp1,ep2~~~) exp로 명시한 표현식을 기준으로 집계한 결과로 추가적인 집계 정보를 보여준다.

명시한 표현식 수와 순서(오른쪽에서 왼쪽순으로)에 따라 레벨 별로 집계한 결과가 반환된다.
표현식 개수가 n개이면 n+1레벨까지 하위레벨에서 상위레벨 순으로 데이터가 집계된다.
SELECT 
    period
  , gubun
  , SUM(loan_jan_amt) totl_jan
FROM kor_loan_status
WHERE period LIKE '2013%' 
GROUP BY ROLLUP(period, gubun); 

->조회 시 period, gubun를 첫번째로 period를 두번째로 마지막은 전체 합계가 나온다(2개를 명시했으니 3레벨임..)

만약 전체 합계를 제외 할 경우
GROUP exp1 , ROLLUP(exp2,exp3)로 한다고 하면 전체를 제외할수 있다.

 SELECT period, gubun, SUM(loan_jan_amt) totl_jan
  FROM kor_loan_status
 WHERE period LIKE '2013%' 
 GROUP BY ROLLUP(period), gubun ;
  -> 이런 식으로 쿼리를 하면 period에 대한 레벨로 집계가 된다.
CUBE (exp1,ep2~~~) 명시한 표현식 개수에 따라 가능한 모든 조합별로 집계한 결과를 반환한다.
CUBE는 2의 제곱 만큼 종류별로 집계가 된다.
SELECT 
    period
  , gubun
  , SUM(loan_jan_amt) totl_jan
FROM kor_loan_status
WHERE period LIKE '2013%' 
GROUP BY CUBE(period,gubun) ;

  ->조회할 경우 전체,gubun별,period별, period에 대한 sum값으로 총 4개가 집계가 된다.
     
     

왼쪽은 group by절로 조회 오른쪽은 group by ROLLUP으로 조회

 

※ROLLUP과 CUBE 표현식 개수별 집계유형

표현식 집계함수
ROLLUP(exp1,exp2) exp1+exp2
exp1
전체
GROUP BY exp1,ROLLUP(exp2,exp3) exp1+(exp2+ exp 3)
exp1+ exp2
exp1
GROUP BY ROLLUP(exp1),exp2 exp2+ exp1
exp2
CUBE(exp1,exp2) exp1+ exp2
exp1
exp2
전체
GROUP BY exp1, CUBE(exp2,exp3) exp1+( exp2+ exp3)
exp1+( exp2)
exp1+( exp 3)
exp1

 

 

'DB > ORACLE' 카테고리의 다른 글

17.[오라클]JOIN 관련 정리  (0) 2024.02.07
16.[오라클]집합연산자 정리  (0) 2024.02.07
14.[오라클]집계함수 정리  (0) 2024.02.05
13.[오라클]SQL함수 정리  (0) 2024.01.28
12.[오라클]SQL문 관련 정리하기  (0) 2024.01.21