类别:

/sql-reference/functions-aggregation`(通用)、:doc:/sql-reference/functions-window-syntax`

KURTOSIS

返回非 NULL 记录的样本过量峰度。如果组内的所有记录都是 NULL,则函数返回 NULL。

以下公式用于计算样本过量峰度:

\[(n * (n+1))/((n-1) * (n-2) * (n-3)) * (n * m_4/(k_2)^2) - 3 * (n-1)^2 / ((n-2) * (n-3))\]

其中:

  • \(n\) 表示非 NULL 记录的数量。

  • \(m_4\) 表示样本第四个中心矩。

  • \(k_2\) 表示方差的对称无偏估计量。

语法

聚合函数

KURTOSIS( <expr> )
Copy

窗口函数

KURTOSIS( <expr> ) OVER ( [ PARTITION BY <expr2> ] )
Copy

实参

expr

计算结果为数值数据类型(例如 INTEGER、FLOAT、DECIMAL)的表达式。

expr2

定义各个组或窗口的表达式。

返回

如果输入数据类型为 DOUBLE/FLOAT,则返回 DOUBLE。

如果输入数据类型是其他数值数据类型,则返回 DECIMAL。

使用说明

  • 对于少于四条记录的输入,KURTOSIS 返回 NULL。

  • 当此函数作为窗口函数调用时,它不支持:

    • OVER 子句中的 ORDER BY 子句。

    • 显式窗口框架。

示例

创建表并插入一些行:

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

INSERT INTO aggr VALUES
  (1, 10, null),
  (2, 10, 12),
  (2, 20, 22),
  (2, 25, null),
  (2, 30, 35);
Copy

从表中选择所有数据:

SELECT * FROM aggr
  ORDER BY k, v;
Copy
+---+-------+-------+
| K |     V |    V2 |
|---+-------+-------|
| 1 | 10.00 |  NULL |
| 2 | 10.00 | 12.00 |
| 2 | 20.00 | 22.00 |
| 2 | 25.00 |  NULL |
| 2 | 30.00 | 35.00 |
+---+-------+-------+

返回每列的 KURTOSIS 值:

SELECT KURTOSIS(k), KURTOSIS(v), KURTOSIS(v2)
  FROM aggr;
Copy
+----------------+-----------------+--------------+
|    KURTOSIS(K) |     KURTOSIS(V) | KURTOSIS(V2) |
|----------------+-----------------+--------------|
| 5.000000000000 | -2.324218750000 |         NULL |
+----------------+-----------------+--------------+
语言: 中文