관리 메뉴

안까먹을라고 쓰는 블로그

[MSSQL] 집계함수 (GROUP BY, ROLLUP, CUBE, GROUPING SETS) 본문

DataBase/MS SQL

[MSSQL] 집계함수 (GROUP BY, ROLLUP, CUBE, GROUPING SETS)

YawnsDuzin 2023. 9. 21. 14:10

 

반응형
MSSQL 의 집계함수들에 대한 정리자료 입니다.


테이블 정보
SELECT DT_ORDER, CD_ITEM, QT_ORDER  FROM [DZ].[dbo].[ORDER] 
ORDER BY DT_ORDER, CD_ITEM

DT_ORDER : 20230901 에는 CD_ITEM : item1 이 2개 있습니다.
DT_ORDER : 20230902 에는 CD_ITEM : item2 이 2개 있습니다.
DT_ORDER : 20230903 에는 CD_ITEM : item3 이 2개 있습니다.


GROUP BY

GROUP BY는
 - GROUP BY [설정컬럼 들...]
와 같이 사용하며, 설정한 "설정컬럼 들.."을 기준으로 하여,
그룹을 지어서 조회가 되며,
※ "설정컬럼 들.."에 없는 컬럼은 SUM, COUNT, AVG, MAX, MIN 등의 함수를 사용하여 조회를 하여야 합니다.
     Ex) 아래의 SUM(QT_ORDER)

SELECT DT_ORDER, CD_ITEM, SUM(QT_ORDER) AS QT_SUM  FROM [DZ].[dbo].[ORDER]
GROUP BY DT_ORDER, CD_ITEM
ORDER BY DT_ORDER, CD_ITEM

 

ROLLUP

ROLLUP은 "GROUP BY" + 소계,합계 까지 조회 가 됩니다.
※ "설정컬럼 들.."에 없는 컬럼은 SUM, COUNT, AVG, MAX, MIN 등의 함수를 사용하여 조회를 하여야 합니다.
     Ex) 아래의 SUM(QT_ORDER)

SELECT DT_ORDER, CD_ITEM, SUM(QT_ORDER) AS QT_SUM  FROM [DZ].[dbo].[ORDER]
GROUP BY ROLLUP(DT_ORDER, CD_ITEM)

 

CUBE

CUBE는
 - CUBE("설정컬럼 들..")
"설정컬럼 들.."의 그룹 기준 및 각 항목 별로 집계를 하여 조회 됩니다.
※ "설정컬럼 들.."에 없는 컬럼은 SUM, COUNT, AVG, MAX, MIN 등의 함수를 사용하여 조회를 하여야 합니다.
     Ex) 아래의 SUM(QT_ORDER)

SELECT DT_ORDER, CD_ITEM, SUM(QT_ORDER) AS QT_SUM  FROM [DZ].[dbo].[ORDER]
GROUP BY CUBE(DT_ORDER, CD_ITEM)

 

GROUPING SETS

GROUPING SETS 는
 - GROUPING SETS("설정 컬럼 들") 과 같이 사용하며,
"설정컬럼 들" 각각을 기준으로 집계를 하여 조회됩니다.
※ "설정컬럼 들.."에 없는 컬럼은 SUM, COUNT, AVG, MAX, MIN 등의 함수를 사용하여 조회를 하여야 합니다.
     Ex) 아래의 SUM(QT_ORDER)

SELECT DT_ORDER, CD_ITEM, SUM(QT_ORDER) AS QT_SUM  FROM [DZ].[dbo].[ORDER]
GROUP BY GROUPING SETS(DT_ORDER, CD_ITEM)

 


GROUPING

GROUPING 는 직접적으로 집계를 해주는 함수는 아니고, 집계 시,, 위의 함수를 사용할때 부가적으로 사용할 수 있는 함수입니다.
집계가 계산된 항목에 대해서는 1의 값을 갖고, 그렇지 않은 항목은 0을 갖는 성질을 이용하여,
아래와 같이 사용할 수 있습니다.
※ GROUP BY, ROLLUP, CUBE, GROUPING SETS 에서 모두 사용가능합니다.

SELECT 
	CASE GROUPING(DT_ORDER) WHEN 1 THEN '전체배송일' ELSE DT_ORDER END AS DT_ORDER,
	CASE GROUPING(CD_ITEM) WHEN 1 THEN '전체품목' ELSE CD_ITEM END AS CD_ITEM,
	SUM(QT_ORDER) AS QT_SUM 
FROM [DZ].[dbo].[ORDER]
GROUP BY GROUPING SETS(DT_ORDER, CD_ITEM)

위 에서와 같이, GROUPING SETS만 사용하는 경우, 아래의 DT_ORDER, CD_ITEM이 NULL로 표시되는 부분에
원하는 값을 설정할 수 있습니다.

 


좀더 자세한 설명을 원하시면, 아래의 MS공식사이트를 참고하시기 바랍니다.
https://learn.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-ver16


끝~

반응형
Comments