Share via


GROUPPARTITION(Entity SQL)

집계가 관련된 현재 그룹 파티션에서 예측된 인수 값의 컬렉션을 반환합니다. GroupPartition 집계는 그룹 기반 집계이며 컬렉션 기반 형식을 포함하지 않습니다.

구문

GROUPPARTITION( [ALL|DISTINCT] expression )

인수

expression 모든 Entity SQL 식입니다.

설명

다음 쿼리는 제품 목록 및 각 제품당 주문 라인 수량 컬렉션을 만듭니다.

SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol
  GROUP BY ol.Product AS p

다음 두 쿼리는 구문적으로 서로 동일합니다.

SELECT p, Sum(GroupPartition(ol.Quantity)) FROM LOB.OrderLines AS ol
  GROUP BY ol.Product AS p
SELECT p, Sum(ol.Quantity) FROM LOB.OrderLines AS ol
  group by ol.Product as p

GROUPPARTITION 연산자는 사용자 정의 집계 연산자와 함께 사용할 수 있습니다.

GROUPPARTITION 은 그룹화된 입력 집합에 대한 참조를 포함하는 특수 집계 연산자입니다. 이러한 참조는 범위 내에 GROUP BY가 있는 쿼리의 아무 곳에서나 사용할 수 있습니다. 예시:

SELECT p, GroupPartition(ol.Quantity) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p

일반 GROUP BY를 사용하는 경우 그룹화 결과는 숨겨집니다. 결과는 집계 함수에서만 사용할 수 있습니다. 그룹화 결과를 보려면 하위 쿼리를 사용하여 그룹화 및 입력 집합 결과를 상호 연결해야 합니다. 다음 두 쿼리는 동일한 의미를 갖습니다.

SELECT p, (SELECT q FROM GroupPartition(ol.Quantity) AS q) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p
SELECT p, (SELECT ol.Quantity AS q FROM LOB.OrderLines AS ol2 WHERE ol2.Product = p) FROM LOB.OrderLines AS ol GROUP BY ol.Product AS p

예제와 나와 있듯이 GROUPPARTITION 집계 연산자를 사용하면 그룹화 이후 입력 집합에 대한 참조를 보다 쉽게 가져올 수 있습니다.

expression 매개 변수를 사용하는 경우 GROUPPARTITION 연산자는 연산자 입력에서 Entity SQL 식을 지정할 수 있습니다.

예를 들어, 그룹 파티션에 대한 다음의 모든 입력 식은 유효합니다.

SELECT groupkey, GroupPartition(b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(1) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(a + b) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({a + b}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition({42}) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey
SELECT groupkey, GroupPartition(b > a) FROM {1,2,3} AS a INNER JOIN {4,5,6} AS b ON true GROUP BY a AS groupkey

예시

다음 예제에서는 GROUPPARTITION 절을 GROUP BY 절과 함께 사용하는 방법을 보여 줍니다. GROUP BY 절은 SalesOrderHeader 엔터티를 해당 Contact별로 그룹화합니다. 그리고 나서 GROUPPARTITION 절은 각 그룹에 대한 TotalDue 속성을 예상하여 10진수 컬렉션을 생성합니다.

USING Microsoft.Samples.Entity
Function MyAvg(dues Collection(Decimal)) AS
(
    Avg(SELECT value due FROM dues AS due WHERE due > @price)
)
SELECT TOP(10) contactID, MyAvg(GroupPartition(order.TotalDue)) 
FROM AdventureWorksEntities.SalesOrderHeaders AS order 
GROUP BY order.Contact.ContactID AS contactID;