관리 메뉴

안까먹을라고 쓰는 블로그

[MSSQL] GROUP BY절(Feat.HAVING, ROLLUP, CUBE, GROUPING SETS) 본문

DataBase/MS SQL

[MSSQL] GROUP BY절(Feat.HAVING, ROLLUP, CUBE, GROUPING SETS)

YawnsDuzin 2023. 11. 15. 16:35

 

반응형

GROUP BY 절은 행 그룹(group of rows)을 생성하고, HAVING절은 조회할 행 그룹을 선택한다.
GROUP BY 절은 WHERE 절 다음에 기술하며, WHERE 절이 수행된 후 수행된다. 
HAVING절은 GROUP BY 절 다음에 기술하며, GROUP BY 절이 수행된 후 수행된다.

SELECT 절	-- (5)
	FROM 절	-- (1)
    WHERE 절	-- (2)
GROUP BY 절	-- (3)
   HAVING 절	-- (4)
ORDER BY 절	-- (6)

 

GROUP BY 절

GROUP BY 절은 expr로 행 그룹을 생성하고, 생성된 행 그룹을 하나의 행으로 그룹핑(grouping)한다.

GROUP BY expr [, expr}]...

 

ROLLUP

ROLLUP은 지정한 표현식의 계층별 소계와 촐계를 집계한다.

ROLLUP (expression)list [, expression_list]...)
GROUP BY 결과
ROLLUP (a) (a), ()
ROLLUP (a, b) (a, b), (a), ()
ROLLUP (a, b, c) (a, b, c), (a, b), (a), ()

 

CUBE

CUBE는 지정한 표현식의 모든 조합을 집계한다.

CUBE (express_list [, expression_list]...)
GROUP BY 결과
CUBE (a) (a), ()
CUBE (a, b) (a, b), (a), (b), ()
CUBE (a, b, c) (a, b, c), (a, b), (a, c), (b, c), (a), (b), (c), ()

 

GROUPING SETS
GROUPING SETS ({rollup_cube_clause | grouping_expression_list})

GROUPING SETS은 지정한 행 그룹으로 행을 집계한다.
행 그룹으로 ROLLUP과 CUBE를 사용할 수도 있다.

GROUP BY 결과
GROUPING SETS (a, b) (a), (b)
GROUPING SETS ((a, b), a, ()) (a, b), (a), ()
GROUPING SETS (a, ROLLUP (b)) (a), (b), ()
GROUPING SETS (a, ROLLUP (b, c)) (a), (b, c), (b), ()
GROUPING SETS (a, b, ROLLUP (c)) (a), (b), (c), ()

조합열

조합열(composite column)은 하나의 단위로 처리되는 열의 조합이다. 조합열은 아래와 같이 동작한다.

GROUP BY 결과
ROLLUP ((a, b)) (a, b), ()
ROLLUP (a, (b, c)) (a, b, c), (a), ()
ROLLUP (((a, b), c) (a, b, c), (a, b), ()

 

연결그룹

연결그룹(concatenated grouping)을 사용하면 행 그룹을 간결하게 작성할 수 있다.
연결그룹은 아래와 같이 동작한다.

GROUP BY 결과
a, ROLLUP (a) (a, b), (a)
a, ROLLUP (b, c) (a, b, c), (a, b), (a)
a, ROLLUP (b), ROLLUP (c) (a, b, c), (a, b), (a, c), (a)
GROUPING SETS (a, b), GROUPING SETS (c, d) (a, c), (a, d), (b, c), (b, d)

 


사용 예 및 문법관련해서는 아래의 MSSQL 공식문서를 참고하시기 바랍니다.
https://learn.microsoft.com/en-us/sql/t-sql/queries/select-group-by-transact-sql?view=sql-server-ver16

 

GROUP BY (Transact-SQL) - SQL Server

SELECT - GROUP BY- Transact-SQL

learn.microsoft.com


끝~

 

 

반응형
Comments