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


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 должно точно соответствовать выражению списка выбора.

Примечание.

Если предложение 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 оператор GROUP BY задает группы, в которые помещаются объекты, возвращаемые запросом. Запрос основан на модели AdventureWorks Sales. Для компиляции и запуска этого запроса выполните следующие шаги.

  1. Выполните процедуру, описанную в разделе "Практическое руководство. Выполнение запроса, возвращающего результаты PrimitiveType".

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

SELECT VALUE name FROM AdventureWorksEntities.Products 
    AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price

См. также