Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Указывает группы, в которые помещаются объекты, возвращаемые выражением запроса (SELECT).
Синтаксис
[ GROUP BY aliasedExpression [ ,...n ] ]
Аргументы
aliasedExpression Любое допустимое выражение запроса, для которого выполняется группирование.
expression может быть свойством или не агрегатным выражением, ссылающимся на свойство, возвращаемое предложением FROM. Каждое выражение в предложении 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 как часть выражения группировки, а затем ссылается на это имя в списке SELECT. Он также указывает агрегат sum в списке SELECT, который внутренне ссылается на цену и количество строки заказа.
Каждое выражение 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. Чтобы скомпилировать и запустить этот запрос, выполните следующие действия.
Выполните процедуру, описанную в разделе "Практическое руководство. Выполнение запроса, возвращающего результаты PrimitiveType".
Передайте следующий запрос в качестве аргумента в
ExecutePrimitiveTypeQueryметод:
SELECT VALUE name FROM AdventureWorksEntities.Products
AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price