类别:

聚合函数 (通用)、 窗口函数的语法和用法 (通用)

VAR_SAMP

返回组中非 NULL 记录的样本方差。如果组内的所有记录都是 NULL,则返回 NULL。

别名:

VARIANCE、VARIANCE_SAMP

语法

聚合函数

VAR_SAMP( [DISTINCT] <expr1> )

窗口函数

VAR_SAMP( <expr1> ) OVER (
                         [ PARTITION BY <expr2> ]
                         [ ORDER BY <expr3> [ { ASC | DESC } ] [ NULLS { FIRST | LAST } ] [ <window_frame> ] ]
                         )

有关 window_frame 语法的详细信息,请参阅 窗口函数的语法和用法

实参

expr1

expr1 的计算结果应为其中一种数值数据类型。

expr2

这是分区所依据的表达式。

expr3

这是每个分区中作为排序规则的表达式。

返回

返回值的数据类型是 NUMBER(<precision>, <scale>)。比例取决于正在处理的值。

使用说明

  • 对于单条记录输入,VAR_SAMP、VARIANCE 和 VARIANCE_SAMP 都返回 NULL。这与 Oracle 行为不同,在 Oracle 行为中,VAR_SAMP 为单条记录返回 NULL,并且 VARIANCE 返回 0。

  • 传递 VARCHAR 表达式时,此函数会将输入隐式转换为浮点值。如果无法执行转换,则会返回错误。

  • 当此函数作为窗口函数调用时:

    • 语法允许 DISTINCT 关键字,但它会被忽略。

    • 如果未指定窗口框架,则使用以下隐式窗口框架:

      RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

      有关窗口框架的更多信息(包括语法、使用说明和示例),请参阅 窗口函数的语法和用法

示例

此示例演示如何使用 VAR_SAMP 函数:

创建并填写表:

CREATE TABLE aggr (k INT, v DECIMAL(10,2), v2 DECIMAL(10, 2));

INSERT INTO aggr VALUES
  (1, 10, NULL),
  (2, 10, 11),
  (2, 20, 22),
  (2, 25, NULL),
  (2, 30, 35);

查询表:

SELECT k, VAR_SAMP(v), VAR_SAMP(v2)
  FROM aggr
  GROUP BY k
  ORDER BY k;
+---+---------------+----------------+
| K |   VAR_SAMP(V) |   VAR_SAMP(V2) |
|---+---------------+----------------|
| 1 |          NULL |           NULL |
| 2 | 72.9166666667 | 144.3333333333 |
+---+---------------+----------------+