MySQL) 층간 합계 (ROLLUP)
본문 바로가기
Data Base/SQL

MySQL) 층간 합계 (ROLLUP)

by 조훈이 2021. 12. 28.

MySQL) WITH ROLLUP

 GROUP BY 절과 함께 사용되는 총합 또는 층간 합계 함수


[CREATE TABLE]

CREATE TABLE price (
	Category1 VARCHAR(10),
 	Category2 VARCHAR(10),
 	Cnt INT
);

  위와 같은 TABLE 을 만들었다.

 

 

[INSERT INTO price]

INSERT INTO price VALUES
('Book', 'A', 12),
('Book', 'B', 8),
('Book', 'C', 23),
('Clothes', 'A', 9),
('Clothes', 'B', 11),
('Clothes', 'C', 7),
('Elec', 'A', 52),
('Elec', 'B', 19);

  price TABLE에 위와 같은 data들을 삽입하였다.

 

[SELECT ~ WITH ROLLUP]

SELECT Category1, Category2, COUNT(*), SUM(Cnt)
FROM price
GROUP BY Category1, Category2 WITH ROLLUP;

<실행 결과>

  위와 같은 실행결과가 나왔다.  ROLLUP 함수를 통해 GROUP 들의 소분류에 대한 결과도 파악할 수 있다. 처리되는 과정은 아래와 같다.

  4, 8, 11 번째 줄은 각각 Category1의 값으로 'Book', 'Clothes', 'Elec'을 가지는 Data 들의 총 개수와 Cnt의 합을 나타낸다. Category1이 'Book'인 Data들의 소합계, 'Clothes'인 Data들의 소합계, 'Elec'인 Data들의 소합계를 나타내는 것 이다.

 

  12 번째 줄은 모든 Data들의 총 개수와 Cnt의 합을 나타낸다.

 

  ROLLUP 함수를 통해 해당 GROUP 의 GROUP별 소분류에 대한 결과도 출력할 수 있는 것 이다.

 

[ROLLUP을 사용하지 않은 SELECT]

SELECT Category1, Category2, COUNT(*), SUM(Cnt)
FROM price
GROUP BY Category1, Category2;

  ROLLUP을 사용하지 않은 채 SELECT를 해 보았다.

 

  그 결과 GROUP을 소분류한 것에 대한 Data의 결과는 출력되지 않았다.

 

  결론 : ROLLUP을 통해 GROUP들의 각각의 분류들에 대한 Data를 확보할 수 있다.

728x90

댓글