支持以下两个版本的方差和标准差函数:一个样本版本,一个总体版本。根据使用函数的统计上下文来在两种版本间进行选择。
所有方差和标准差函数都是真集合函数,因为它们可以按照查询的 GROUP BY 子句所确定的方式来计算行分区的值。与其它基本集合函数(例如 MAX 或 MIN)一样,它们执行的计算也会忽略输入中的 NULL 值。
为提高性能,数据库服务器在一步中计算平均值和离均差。这意味着只需进行一次数据传递。
此外,无论被分析表达式的域如何,都将使用 IEEE 双精度浮点运算完成所有方差和标准差计算。如果任何方差或标准差函数的输入是空集,则每个函数将返回 NULL 作为其结果。如果对单个行计算 VAR_SAMP,则它将返回 NULL,而计算 VAR_POP 将返回值 0。
以下是受支持的标准差和方差函数:
此函数是 STDDEV_SAMP 函数的别名。
下面的查询返回一个结果集,该结果集显示了其薪水比其部门平均薪水高一个标准差的雇员。标准差是反映数据与平均值之间的差异的测量单位。
SELECT * FROM ( SELECT Surname AS Employee, DepartmentID AS Department, CAST( Salary as DECIMAL( 10, 2 ) ) AS Salary, CAST( AVG( Salary ) OVER ( PARTITION BY DepartmentID ) AS DECIMAL ( 10, 2 ) ) AS Average, CAST( STDDEV_POP( Salary ) OVER ( PARTITION BY DepartmentID ) AS DECIMAL ( 10, 2 ) ) AS StandardDeviation FROM Employees GROUP BY Department, Employee, Salary ) AS DerivedTable WHERE Salary > Average + StandardDeviation ORDER BY Department, Salary, Employee; |
下表是查询的结果集。每个部门至少有一名雇员的薪水远远偏离于平均值。
Employee | Department | Salary | Average | StandardDeviation | |
---|---|---|---|---|---|
1 | Lull | 100 | 87900.00 | 58736.28 | 16829.60 |
2 | Scheffield | 100 | 87900.00 | 58736.28 | 16829.60 |
3 | Scott | 100 | 96300.00 | 58736.28 | 16829.60 |
4 | Sterling | 200 | 64900.00 | 48390.95 | 13869.60 |
5 | Savarino | 200 | 72300.00 | 48390.95 | 13869.60 |
6 | Kelly | 200 | 87500.00 | 48390.95 | 13869.60 |
7 | Shea | 300 | 138948.00 | 59500.00 | 30752.40 |
8 | Blaikie | 400 | 54900.00 | 43640.67 | 11194.02 |
9 | Morris | 400 | 61300.00 | 43640.67 | 11194.02 |
10 | Evans | 400 | 68940.00 | 43640.67 | 11194.02 |
11 | Martinez | 500 | 55500.00 | 33752.20 | 9084.50 |
雇员 Scott 的收入为 $96,300.00,而部门平均收入为 $58,736.28。该部门的标准差是 $16,829.00,这表示低于 $75,565.88 (58736.28 + 16829.60 = 75565.88
) 的薪水会在平均值的一个标准差范围内。雇员 Scott 的薪水 $96,300.00 远远高于该数字。
此示例假设每个雇员的 Surname 和 Salary 唯一,而实际情况不一定如此。为确保唯一性,应向 GROUP BY 子句添加 EmployeeID。
以下语句列出不同时间段每个订单的产品数目的平均值和方差:
SELECT YEAR( ShipDate ) AS Year, QUARTER( ShipDate ) AS Quarter, AVG( Quantity ) AS Average, STDDEV_POP( Quantity ) AS Variance FROM SalesOrderItems GROUP BY Year, Quarter ORDER BY Year, Quarter; |
此查询会返回以下结果:
Year | Quarter | Average | Variance |
---|---|---|---|
2000 | 1 | 25.775148 | 14.2794... |
2000 | 2 | 27.050847 | 15.0270... |
... | ... | ... | ... |
此函数计算由数字表达式组成的样本的标准差,类型为 DOUBLE。例如,以下语句返回不同季度每个订单的产品数目的平均值和方差:
SELECT YEAR( ShipDate ) AS Year, QUARTER( ShipDate ) AS Quarter, AVG( Quantity ) AS Average, STDDEV_SAMP( Quantity ) AS Variance FROM SalesOrderItems GROUP BY Year, Quarter ORDER BY Year, Quarter; |
此查询会返回以下结果:
Year | Quarter | Average | Variance |
---|---|---|---|
2000 | 1 | 25.775148 | 14.3218... |
2000 | 2 | 27.050847 | 15.0696... |
... | ... | ... | ... |
此函数是 VAR_SAMP 函数的别名。
此函数计算由数字表达式组成的总体的统计方差,类型为 DOUBLE。例如,以下语句列出不同时间段每个订单的产品数目的平均值和方差:
SELECT YEAR( ShipDate ) AS Year, QUARTER( ShipDate ) AS Quarter, AVG( Quantity ) AS Average, VAR_POP( quantity ) AS Variance FROM SalesOrderItems GROUP BY Year, Quarter ORDER BY Year, Quarter; |
此查询会返回以下结果:
Year | Quarter | Average | Variance |
---|---|---|---|
2000 | 1 | 25.775148 | 203.9021... |
2000 | 2 | 27.050847 | 225.8109... |
... | ... | ... | ... |
如果对单个行计算 VAR_POP,则它将返回值 0。
此函数计算由数字表达式组成的样本的统计方差,类型为 DOUBLE。
例如,以下语句列出不同时间段每个订单的产品数目的平均值和方差:
SELECT YEAR( ShipDate ) AS Year, QUARTER( ShipDate ) AS Quarter, AVG( Quantity ) AS Average, VAR_SAMP( Quantity ) AS Variance FROM SalesOrderItems GROUP BY Year, Quarter ORDER BY Year, Quarter; |
此查询会返回以下结果:
Year | Quarter | Average | Variance |
---|---|---|---|
2000 | 1 | 25.775148 | 205.1158... |
2000 | 2 | 27.050847 | 227.0939... |
... | ... | ... | ... |
如果对单个行计算 VAR_SAMP,则它将返回 NULL。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |