본문 바로가기
[파이썬]/데이터베이스

[MariaDB] With Rollup

by sung min_Kim 2023. 11. 27.
With Rollup


총합 포함 그룹화


·  With Rollup


 'With Rollup'은 MariaDB와 같은 SQL 데이터베이스에서 데이터를 그룹화하고, 그룹별 합계뿐만 아니라 그룹 전체의 총합을 한 번에 계산할 때 사용하는 키워드이다. 이는 'Group By' 절과 함께 사용되며, 쿼리 결과에 그룹별 결과와 그룹 전체의 총계를 포함시킨다. 이때, 총계를 나타내는 행의 그룹 식별자는 'Null'로 표시된다.

 


· With Rollup을 사용하는 이유는 ?


 

  • 효율적인 데이터 분석 : With Rollup을 사용하면, 한 번의 쿼리로 그룹별 합계와 총합을 동시에 얻을 수 있다.  이는 데이터 분석 과정을 단순화하고, 분석 시간을 줄일 수 있다.


  • 코드의 단순화 및 가독성 향상 : With Rollup은 복잡한 계산을 단순화한다. 이는 코드의 가독성을 향상시키며, 이해하고 유지 보수하기 쉬운 코드를 작성할 수 있게 도와준다.

 


· With Rollup의 기본 형태

 

Select 컬럼1, 컬럼2, ..., 집계 함수(컬럼)
From 테이블
Where 제한 조건
Group By 컬럼1, 컬럼2, ... With Rollup;


 위의 쿼리에서 칼럼 1, 칼럼 2,... 는 그룹화를 원하는 열들을 나타내고, 집계 함수(컬럼)은 합계, 평균 등의 집계 함수를 나타낸다. 
 'With Rollup'을 'Gruop by' 절과 함께 사용함으로써 그룹화된 각 그룹에 대한 합계뿐만 아니라 그룹 전체의 총합을 한 번에 계산한다.

 주의해야 할 점으로는 Group By 절 안에 나열되는 컬럼의 순서이다. 
 이 순서는 결과의 계층 구조를 결정한다. 

 여기서 말하는 '계층 구조'란 여러 컬럼을 그룹화할 때, 어떤 컬럼이 상위 그룹을 형성하고, 어떤 컬럼이 하위 그룹을 형성하는지를 나타내는 것을 말한다.

 위의 쿼리에서 'Group By' 절의 컬럼 순서는 '칼럼 1', '컬럼 2'이며, 이 순서는 계층 구조를 결정한다.
 결과적으로, 이 쿼리는 먼저 '컬럼 1' 별로 데이터를 그룹화 하고, 그 안에서 다시 '컬럼 2' 별로 데이터를 그룹화한다.

 따라서 With Rollup을 사용할 때에는 Group By 절의 컬럼 순서가 중요하며, 이 순서는 결과의 계층 구조를 결정한다.

 


· 예시

 

<에제_With Rollup 활용> 상품분류 전체에 대한 상품명과 구매수량의 총합을 조회하기

- 조건 : 구매 연도는 2005년에 한함.
- 조회 컬럼 : 상품분류코드(prod_lgu), 상품명(prod_name), 구매수량의 총 합

With Rollup 활용

 위의 쿼리는 상품(prod) 테이블과 주문내역(cart) 테이블을 'Left Outer Join' 방식을 사용하여 연결하였다. 그리하여 상품 테이블에 대한 모든 정보와 주문내역 테이블의 조인 조건(관계 조건, 일반 조건)을 만족하는 데이터를 조회할 수 있다.

 관계 조건(PK = FK)은 상품 테이블의 상품코드(prod_id)와 주문내역 테이블의 상품코드(cart_prod)를 연결시켜 "prod_id에 해당하는 cart_prod 값"을 조회할 수 있다.

 일반 조건은 "2005년도에 주문한 적이 있는 상품"으로 출력 데이터의 범위를 제한한다.

 Gruop By 절은 상품분류코드(prod_lgu)와 상품명(prod_name)을 그룹화하고, 그룹 함수(Sum)를 통해 각 각의 그룹에 대한 연산(prod_price * cart_qty) 수행하고 그 값을 집계한다.
 이후 'With Rollup'을 사용하여 각 그룹의 합계뿐만 아니라 전체 합계를 포함시키며, 전체 합에 대한 식별자는 'Null'로 표기된다. 이 'Null' 값은 실제로 Null 값을 가지는 게 아니라, 그룹의 총합을 나타내는 것임을 기억해야 한다.

 



With Rollup을 사용하면 여러 컬럼에 대해 계층적으로 그룹화를 수행할 수 있다.
Group By 절에 나열된 컬럼 순서에 따라 그룹화의 계층 구조가 결정된다. 
첫 번째 컬럼이 최상위 계층을 형성하며, 그다음 컬럼은 그 하위 계층을 형성한다.


With Rollup을 사용하면 각 그룹의 합계뿐만 아니라 전체 합계도 한 번에 계산할 수 있다. 
이는 데이터 분석에 유용한 정보를 제공하며, 복잡한 쿼리를 단순화하는데 도움이 된다.


With Rollup을 사용했을 때 결과 셋에 Null 값이 나타난다면,
이는 실제 Null 값이 아닌 그룹의 총합을 나타내는 것이다.



With Rollup은 데이터베이스 서버에서 집계 연산을 수행하기 때문에
대량의 데이터에 대한 집계를 빠르게 수행할 수 있다.

따라서 대용량 데이터에 대한 복잡한 집계 연산이 필요할 때
With Rollup을 사용하여 성능을 향상시킬 수 있다.