Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Возвращает коллекцию значений аргументов, проецируемых из текущей секции группы, к которой связан агрегат. Агрегат 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 упрощает получение ссылки на входной набор после группировки.
Оператор GROUPPARTITION может указать любое выражение Entity SQL в входных данных оператора при использовании expression параметра.
Например, все следующие входные выражения в секцию группы допустимы:
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 свойство для каждой группы, что приводит к коллекции десятичных разрядов.
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;