VAR (Transact-SQL)
适用于:Microsoft Fabric Microsoft Fabric
Warehouse 中的 SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse
Analytics Analytics Platform System (PDW)
SQL Analytics 终结点
返回指定表达式中所有值的方差。 后面可以跟随 OVER 子句。
语法
-- Aggregate Function Syntax
VAR ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
VAR ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
注意
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
ALL
对所有值应用该函数。 ALL 为默认值。
DISTINCT
指定考虑每一个唯一值。
expression
是精确或近似数值数据类型类别(bit 数据类型除外)的表达式。 不允许使用聚合函数和子查询。
OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause 将 FROM 子句生成的结果集划分为要应用函数的分区 。 如果未指定,则此函数将查询结果集的所有行视为单个组。 order_by_clause 确定执行操作的逻辑顺序。 需要 order_by_clause。 有关详细信息,请参阅 OVER 子句 (Transact-SQL)。
返回类型
float
注解
如果 VAR 用于 SELECT 语句中的所有项目,则结果集中的每个值都包含在计算中。 VAR 只可用于数字列。 Null 值会被忽略。
VAR 不与 OVER 和 ORDER BY 子句配合使用时为确定性函数。 与 OVER 和 ORDER BY 子句一同指定时,它具有不确定性。 有关详细信息,请参阅 Deterministic and Nondeterministic Functions。
示例
A. 使用 VAR
以下示例返回 AdventureWorks2022 数据库的 SalesPerson
表中所有奖金值的方差。
SELECT VAR(Bonus)
FROM Sales.SalesPerson;
GO
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
B. 使用 VAR
以下示例返回表 dbo.FactSalesQuota
中的销售配额值的统计方差。 第一列中包含所有非重复值的方差,第二列中包含所有值(包括任何重复值)的方差。
-- Uses AdventureWorks
SELECT VAR(DISTINCT SalesAmountQuota)AS Distinct_Values, VAR(SalesAmountQuota) AS All_Values
FROM dbo.FactSalesQuota;
下面是结果集。
Distinct_Values All_Values
---------------- ----------------
159180469909.18 158762853821.10
C. 在 OVER 中使用 VAR
以下示例返回日历年中每季度的销售配额值的统计方差。 请注意,OVER 子句中的 ORDER BY 对统计方差进行排序,SELECT 语句中的 ORDER BY 则对结果集进行排序。
-- Uses AdventureWorks
SELECT CalendarYear AS Year, CalendarQuarter AS Quarter, SalesAmountQuota AS SalesQuota,
VAR(SalesAmountQuota) OVER (ORDER BY CalendarYear, CalendarQuarter) AS Variance
FROM dbo.FactSalesQuota
WHERE EmployeeKey = 272 AND CalendarYear = 2002
ORDER BY CalendarQuarter;
下面是结果集。
Year Quarter SalesQuota Variance
---- ------- ---------------------- -------------------
2002 1 91000.0000 null
2002 2 140000.0000 1200500000.00
2002 3 70000.0000 1290333333.33
2002 4 154000.0000 1580250000.00