Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возвращает коллекцию значений аргументов, проецируемых из текущей секции группы, к которой связан агрегат. Агрегат 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;