DB/SQL

[세무민의 코딩일기] 쿼리 with rollup 으로 중간 합계 구하는 방법!

세기루민 2021. 7. 24. 14:39
728x90

이번 포스팅에서 다룰 것은 RollUp이다. 


ROLLUP을 이용하면 중간 합계나 총합계를 구할 수 있다. 

우선 예시와 함께 진행해보겠다. 

## 예시에 사용된 테이블 
CREATE TABLE TEMP1(
	NUMBER1 INT,
    NUMBER2 INT,
    VARCHARS VARCHAR(30)
);

INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (22, 31, '사과');
INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (13, 11, '파인애플');
INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (53, 11, '체리');
INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (64, 31, '수박');
INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (68, 44, '참외');
INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (99, 53, '오렌지');
INSERT INTO TEMP1 (NUMBER1, NUMBER2, VARCHARS) VALUES (43, 51, '바나나');

예시에서 사용한 테이블은 저번 포스팅과 동일하다.

그렇지만 혹시 모를 것을 대비하여 위에 첨부했다. 


SELECT VARCHARS, NUMBER1, SUM(NUMBER2)
FROM TEMP1
GROUP BY VARCHARS, NUMBER1
WITH rollup;

위의 쿼리처럼 "WITH ROLLUP"을 이용하면 중간합계를 구할 수 있다.

위의 쿼리를 돌리면 아래의 사진처럼 결과가 나온다.

 

사진을 보면 빨간색 네모칸에 있는 값이 중간 합계값

파란색 네모칸에 있는 값은 총 합계값을 말한다.

따라서 ROLLUP을 이용한다면 그리드에서 중간 합계와 총 합계를 표현할 수 있어진다.

만약에 총 합계만 사용하고 싶다면 아래처럼 하면 된다.

SELECT  varchars, 
        sum(number1) as 'number1 비용',
        sum(number2) as 'number2 비용'
FROM TEMP1
group by varchars
with rollup;

위의 코드를 입력하면 

아래처럼 NUMBER1과 NUMBER2의 총 합계를 한번에 출력할 수 있다.

따라서 ROLLUP을 이용하면 다양하게 합계를 출력할 수 있다. 


이번 포스팅에서는 rollup에 대해서 다뤄봤습니다. 

사실 rollup을 이용하지 않고도 합계를 구하는 방법은 많지만 

만약에 DAO에서 바로 front로 합계랑 같이 넘기는 경우에는 rollup을 사용하는 것도 고려해볼 법하다.

다음에는 더 유익한 포스팅으로 찾아오겠습니다. 

728x90