Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Агрегаты — это выражения, которые сокращают ряд входных значений, например одно значение. Агрегаты обычно используются в сочетании с предложением GROUP BY выражения SELECT и существуют ограничения на то, где их можно использовать.
Канонические функции агрегированной сущности SQL
Ниже приведены агрегатные канонические функции Entity SQL.
Avg(выражение)
Возвращает среднее значение значений, отличных от NULL.
Аргументы
Int32, Int64, Double и Decimal.
Возвращаемое значение
Тип expression, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
BigCount(expression)
Возвращает размер агрегата, включая значения NULL и повторяющиеся значения.
Аргументы
Любой тип.
Возвращаемое значение
Объект Int64.
Пример
queryString = @"SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Подсчёт(выражение)
Возвращает размер агрегата, включая значения NULL и повторяющиеся значения.
Аргументы
Любой тип.
Возвращаемое значение
Объект Int32.
Пример
queryString = @"SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Max(expression)
Возвращает максимум значений, отличных от NULL.
Аргументы
AByte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.
Возвращаемое значение
Тип expression, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Мин(выражение)
Возвращает минимальное значение, отличное от NULL.
Аргументы
AByte, Int16, Int32, Int64, Byte, Single, Double, Decimal, DateTime, DateTimeOffset, Time, String, Binary.
Возвращаемое значение
Тип expression, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
StDev(expression)
Возвращает стандартное отклонение значений, отличных от NULL.
Аргументы
, Int32, Int64DoubleDecimal.
Возвращаемое значение
А Double.
Null, если все входные значения являются null значениями.
Пример
queryString = @"SELECT VALUE StDev(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE StDev(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
StDevP(expression)
Возвращает стандартное отклонение для совокупности всех значений.
Аргументы
, Int32, Int64DoubleDecimal.
Возвращаемое значение
Double, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE StDevP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE StDevP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
Сумма(выражение)
Возвращает сумму значений, отличных от NULL.
Аргументы
, Int32, Int64DoubleDecimal.
Возвращаемое значение
Double, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Var(expression) (переменная (выражение))
Возвращает дисперсию всех ненулевых значений.
Аргументы
, Int32, Int64DoubleDecimal.
Возвращаемое значение
Double, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE Var(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE Var(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
VarP(expression)
Возвращает дисперсию для совокупности всех непустых значений.
Аргументы
, Int32, Int64DoubleDecimal.
Возвращаемое значение
Double, или null, если все входные значения являются значениями null.
Пример
queryString = @"SELECT VALUE VarP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE VarP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
Эквивалентную функциональность предоставляет управляемый поставщик клиента Microsoft SQL. Дополнительные сведения см. в разделе SqlClient для функций Entity Framework.
Агрегаты, созданные на основе коллекций
Агрегаты на основе коллекции (функции коллекции) работают с коллекциями и возвращают значение. Например, если ORDERS представляет собой коллекцию всех заказов, можно вычислить самую раннюю дату доставки со следующим выражением:
min(select value o.ShipDate from LOB.Orders as o)
Выражения внутри агрегатов на основе коллекции оцениваются в пределах текущей области разрешения имен окружающей среды.
Агрегаты на основе групп
Агрегаты на основе групп вычисляются по группе, как определено предложением GROUP BY. Для каждой группы в результате отдельный агрегат вычисляется с использованием элементов каждой группы в качестве входных данных для агрегатного вычисления. Если предложение group-by используется в выражении select, в предложении проекции или предложения order-by могут присутствовать только имена выражений группирования, агрегаты или константы.
В следующем примере вычисляется среднее количество, заказанное для каждого продукта.
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
Возможно использование агрегатной функции по группам без явного предложения GROUP BY в выражении SELECT. В этом случае все элементы рассматриваются как одна группа. Это эквивалентно указанию группировки на основе константы. Например, следующее выражение:
select avg(ol.Quantity) from LOB.OrderLines as ol
Это эквивалентно следующему:
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
Выражения внутри агрегата на основе групп оцениваются в области разрешения имен, которая будет видна выражению предложения WHERE.
Как и в Transact-SQL, агрегаты на основе групп также могут указывать модификатор ALL или DISTINCT. Если указан модификатор DISTINCT, дубликаты удаляются из агрегированной коллекции входных данных, прежде чем агрегат вычисляется. Если указан модификатор ALL (или если модификатор не указан), не выполняется повторная ликвидация.