GROUP BY(Transact-SQL)

업데이트: 2006년 7월 17일

출력 행을 배치할 그룹을 지정합니다. SELECT 절(<SELECT 목록>)에 집계 함수가 포함되어 있으면 GROUP BY는 그룹별 요약 값을 계산합니다. GROUP BY가 지정되면 SELECT 목록에서 집계 식이 아닌 식의 각 열이 GROUP BY 목록에 포함되거나, GROUP BY 식이 SELECT 목록 식과 정확히 일치해야 합니다.

[!참고] ORDER BY 절을 지정하지 않으면 GROUP BY 절을 사용하여 반환된 그룹들에는 특별한 순서가 부여되지 않습니다. 특별한 데이터 순서를 지정하려면 항상 ORDER BY 절을 사용하는 것이 좋습니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

[ GROUP BY [ ALL ] group_by_expression [ ,...n ] 
    [ WITH { CUBE | ROLLUP } ] 
] 

인수

  • ALL
    WHERE 절에서 지정한 검색 조건에 일치하는 행이 없는 경우에도 모든 그룹과 결과 집합을 포함합니다. ALL이 지정되면 검색 조건에 일치하지 않는 그룹의 요약 열에 Null 값이 반환됩니다. CUBE 또는 ROLLUP 연산자와 함께 ALL을 지정할 수는 없습니다.

    원격 테이블을 액세스하는 쿼리에 WHERE 절이 있으면 GROUP BY ALL을 사용할 수 없습니다.

  • group_by_expression
    그룹화를 수행할 입니다. group_by_expression은 그룹화 열이라고도 합니다. group_by expression은 열이거나 FROM 절에서 반환된 열을 참조하는 집계가 아닌 식이 될 수 있습니다. SELECT 목록에 정의된 열 별칭은 그룹화 열을 지정하기 위해 사용할 수 없습니다.

    [!참고] text, ntextimage 유형의 열은 group_by_expression에 사용할 수 없습니다.

    CUBE 또는 ROLLUP이 없이 GROUP BY 절을 지정할 경우 group_by_expression 항목의 수는 GROUP BY 열 크기, 집계된 열 및 쿼리에 포함된 집계 값의 제한을 받습니다. 이 제한은 중간 작업 테이블이 중간 쿼리 결과를 보유하는 데 필요한 8,060바이트 제한을 기준으로 책정됩니다. CUBE 또는 ROLLUP이 지정될 경우 최대 10개의 그룹화 식이 허용됩니다.

    xml 데이터 형식 메서드는 group_by_expression에 직접 지정할 수 없습니다. 대신 내부적으로 xml 데이터 형식 메서드를 사용하는 사용자 정의 함수를 참조하거나 이를 사용하는 계산 열을 참조해야 합니다.

  • CUBE
    GROUP BY에서 제공하는 일반 행과 더불어 요약 행을 결과 집합에 포함시키도록 지정합니다. GROUP BY 요약 행은 결과 집합에 있는 그룹과 하위 그룹의 가능한 모든 조합에 대해 반환됩니다. GROUP BY 요약 행은 결과 집합에서 NULL로 표시되지만 모든 값을 나타내는 데 사용됩니다. GROUPING 함수를 사용하여 결과 집합의 Null 값이 GROUP BY 요약 값인지 여부를 확인할 수 있습니다.

    결과 집합에 있는 요약 행의 개수는 GROUP BY 절에 포함된 열의 개수에 의해 결정됩니다. GROUP BY 절의 각 피연산자(열)는 그룹화 NULL 하에서 바인드되고, 그룹화는 다른 모든 피연산자(열)에 적용됩니다. CUBE는 그룹 및 하위 그룹의 가능한 모든 조합을 반환하기 때문에 그룹 열이 지정된 순서에 상관 없이 행의 개수는 같습니다.

  • ROLLUP
    GROUP BY에서 제공하는 일반 행과 더불어 요약 행을 결과 집합에 포함시키도록 지정합니다. 그룹은 그룹의 가장 낮은 수준부터 가장 높은 수준까지 계층 순서로 요약됩니다. 그룹의 계층은 그룹 열이 지정된 순서에 의해 결정됩니다. 따라서 그룹 열의 순서를 바꾸면 결과 집합에 생성되는 행의 개수에 영향을 미칩니다.

    ms177673.note(ko-kr,SQL.90).gif중요:
    CUBE 또는 ROLLUP을 사용할 경우 고유 집계, 예를 들어 AVG(DISTINCT column_name), COUNT(DISTINCT column_name) 및 SUM(DISTINCT column_name)은 지원되지 않습니다. 이러한 고유 집계를 사용하면 Microsoft SQL Server 2005 데이터베이스 엔진는 오류 메시지를 반환하고 쿼리를 취소합니다.

1. 간단한 GROUP BY 절 사용

다음 예에서는 SalesOrderDetail 테이블의 각 SalesOrderID에 대한 합계를 계산합니다.

USE AdventureWorks ;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID ;

2. 여러 개의 테이블에 대해 GROUP BY 절 사용

다음 예에서는 EmployeeAddress 테이블과 조인된 Address 테이블의 City별 직원 수를 계산합니다.

USE AdventureWorks ;
GO
SELECT a.City, COUNT(ea.AddressID) EmployeeCount
FROM HumanResources.EmployeeAddress ea 
INNER JOIN Person.Address a
ON ea.AddressID = a.AddressID
GROUP BY a.City
ORDER BY a.City ;

3. 식에 GROUP BY 절 사용

다음 예에서는 DATEPART 함수를 사용하여 각 연도별 총 판매액을 검색합니다. SELECT 목록 및 GROUP BY 절 모두에 같은 식이 있어야 합니다.

USE AdventureWorks ;
GO
SELECT DATEPART(yyyy,OrderDate) AS Year,
SUM(TotalDue) AS AverageOrderAmt
FROM Sales.SalesOrderHeader
GROUP BY DATEPART(yyyy,OrderDate)
ORDER BY DATEPART(yyyy,OrderDate) ;

참고 항목

참조

SELECT(Transact-SQL)
SELECT 절(Transact-SQL)

관련 자료

큐브를 사용한 데이터 요약
ROLLUP을 사용하여 데이터 요약

도움말 및 정보

SQL Server 2005 지원 받기

변경 내역

릴리스 내역

2006년 7월 17일

새로운 내용
  • 예 3을 추가했습니다.

2005년 12월 5일

변경된 내용
  • 예 2를 수정했습니다.