통계를 보여줄 때 ROLLUP 연산자를 사용하면 쉽게 총합계를 보여줄 수 있다.
하지만 ROLLUP 연산자가 지원되지 않는 버전이라면 어떻게 총합계를 보여줘야할까?
2008 버전에서 열심히 ROLLUP 연산자를 이용하여 작업을 하였다.
하지만 작업한 것을 적용해야 할 서버가 2005 버전이라는 것을 뒤늦게 알았다.
ROLLUP 연산자는 2008 버전에서 생긴 기능으로 당연히 2005 버전에서는 사용할 수 없다.
먼저 2008 버전 이상에서 ROLLUP 연산자를 이용한 결과를 확인해 보자.
CREATE TABLE dbo.TEST_STAT ( REG_DATE CHAR(10) , USER_CNT INT , ORDER_CNT INT , TOTAL_CASH INT ) GO
INSERT INTO dbo.TEST_STAT VALUES ('2013-05-01', 100, 20, 200000) , ('2013-05-02', 80, 21, 210000) , ('2013-05-03', 150, 40, 420000) , ('2013-05-20', 30, 5, 30000) GO
-- 2008 버전 이상은 ROLLUP 연산자를 이용하여 총합계 계산 SELECT REG_DATE, SUM(USER_CNT) AS USER_CNT , SUM(ORDER_CNT) AS ORDER_CNT , SUM(TOTAL_CASH) AS TOTAL_CASH FROM dbo.TEST_STAT GROUP BY ROLLUP (REG_DATE) GO
|
이번에는 2005 버전에서 UNION ALL 연산을 이용하여 총합계를 구해보자.
-- 2005 버전 이하는 UNION ALL 연산을 이용하여 총합계 계산 SELECT REG_DATE, SUM(USER_CNT) AS USER_CNT , SUM(ORDER_CNT) AS ORDER_CNT , SUM(TOTAL_CASH) AS TOTAL_CASH FROM dbo.TEST_STAT GROUP BY REG_DATE UNION ALL SELECT 'TOTAL', SUM(USER_CNT) AS USER_CNT , SUM(ORDER_CNT) AS ORDER_CNT , SUM(TOTAL_CASH) AS TOTAL_CASH FROM ( SELECT REG_DATE, SUM(USER_CNT) AS USER_CNT , SUM(ORDER_CNT) AS ORDER_CNT , SUM(TOTAL_CASH) AS TOTAL_CASH FROM dbo.TEST_STAT GROUP BY REG_DATE ) AS A GO
|
UNION ALL 연산을 이용하여 ROLLUP 연산자를 사용한 것처럼 총합계를 구할 수 있다.
하지만 ROLLUP 연산자를 사용하면 더 쉽고 가독성 좋게 구현할 수 있다.
새로운 버전이 생길 때 마다 새로운 기능이 생긴다.
이런 기능들을 잘 익혀서 적재적소에 사용하면 더 쉽고 가독성 좋게, 그리고 성능상에도 이점을
가져올 수 있다.
'DBMS > SQL Server' 카테고리의 다른 글
[SQL Server] Hot Add 메모리 (0) | 2013.05.08 |
---|---|
[SQL Server] Hot Add CPU (0) | 2013.05.08 |
[SQL Server] 모든 동적 뷰와 함수를 확인하기 위한 쿼리 (0) | 2013.05.02 |
[SQL Server] 가장 조각이 많이 난 인덱스 TOP 10 (0) | 2013.04.26 |
[SQL Server] 별칭(Alias)을 지정하는 여러가지 방법 (0) | 2013.04.26 |