Поделиться через


GROUP BY (язык Entity SQL)

Определяет группы, в которые должны быть помещены объекты, возвращаемые выражением запроса (SELECT).

[ GROUP BY aliasedExpression [ ,...n ] ]

Аргументы

  • aliasedExpression
    Любое допустимое выражение запроса, в котором выполняется группирование. Аргумент expression может быть свойством или нестатистическим выражением, ссылающимся на свойство, которое возвращается предложением FROM. Каждое выражение в предложении GROUP BY должно иметь тип, который может быть проверен на равенство. Такими типами обычно являются скалярные примитивы — числа, строки и даты. Операция GROUP BY не может быть выполнена по коллекциям.

Замечания

Если в <список выбора> предложения SELECT включены статистические функции, то инструкция GROUP BY вычисляет сводное значение для каждой группы. Если задано предложение GROUP BY, то каждое имя свойства во всех нестатистических выражениях в списке выбора должно быть включено в список GROUP BY либо выражение GROUP BY должно точно соответствовать выражению списка выбора.

NoteПримечание.

Если предложение ORDER BY не задано, то группы, возвращаемые предложением GROUP BY, не упорядочиваются. Рекомендуется всегда пользоваться предложением ORDER BY, чтобы данные были представлены в определенном порядке.

Если предложение GROUP BY задано явным или неявным образом (например, в силу присутствия в запросе предложения HAVING), то текущая область является скрытой и появляется новая область.

Предложения SELECT, HAVING и ORDER BY больше не смогут ссылаться на имена элементов в предложении FROM. Ссылка будет возможна только на сами выражения группирования. Для этого каждому выражению группирования можно присвоить новые имена (псевдонимы). Если для выражения группирования не задан псевдоним, то Entity SQL пытается создать псевдоним согласно правилам создания псевдонимов, как показано в следующем примере.

SELECT g1, g2, ...gn FROM c as c1

GROUP BY e1 as g1, e2 as g2, ...en as gn

Выражения в предложении GROUP BY не могут ссылаться на имена, определенные ранее в том же предложении GROUP BY.

Помимо имен группирований, в предложениях SELECT, HAVING и ORDER BY могут быть указаны статистические функции. Статистическая функция содержит выражение, которое вычисляется для каждого элемента в группе. Статистический оператор объединяет значения этих выражений (обычно, но не всегда) в единственное значение. Статистическое выражение может ссылаться на исходные имена элементов, которые видны в родительской области, или на любые новые имена, указанные в самом предложении GROUP BY. Хотя статистические выражения указываются в предложениях SELECT, HAVING и ORDER BY, они фактически вычисляются в той же области, что и выражения группирования, как показано в следующем примере.

SELECT name, sum(o.Price * o.Quantity) as total

FROM orderLines as o

GROUP BY o.Product as name

В этом запросе предложение GROUP BY применяется для создания отчета о стоимости всех заказов с разбивкой по товарам. Товару в выражении группирования присваивается имя name, которое затем указывается в списке выбора. Запрос также содержит в списке выбора статистическую функцию sum, которая внутренним образом ссылается на цену и количество в строке заказа.

Каждое ключевое выражение GROUP BY должно содержать как минимум одну ссылку на область ввода.

SELECT FROM Persons as P
GROUP BY Q + P   -- GOOD
GROUP BY Q   -- BAD
GROUP BY 1   -- BAD, a constant is not allowed

Пример использования GROUP BY см. в разделе HAVING (язык Entity SQL).

Примеры

В следующем запросе Entity SQL оператор GROUP BY задает группы, в которые помещаются объекты, возвращаемые запросом. Запрос основан на модели AdventureWorks Sales. Для компиляции и запуска этого запроса выполните следующие шаги.

  1. Следуйте инструкциям в разделе Как выполнить запрос, возвращающий типы-примитивы (EntityClient).

  2. Передайте методу ExecutePrimitiveTypeQuery в качестве аргумента следующий запрос:

SELECT VALUE name FROM AdventureWorksEntities.Product 
    as P GROUP BY P.Name HAVING MAX(P.ListPrice) > 5

Далее показан вывод.

Value: LL Mountain Seat Assembly
Value: ML Mountain Seat Assembly
Value: HL Mountain Seat Assembly
Value: LL Road Seat Assembly
Value: ML Road Seat Assembly

См. также

Основные понятия

Справочник по Entity SQL
Выражения запросов (язык Entity SQL)