类别:

聚合函数 (通用)、 窗口函数

MEDIAN

确定一组值的中位数。

语法

聚合函数

MEDIAN( <expr> )
Copy

窗口函数

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

实参

expr

表达式的计算结果必须为数值数据类型(INTEGERFLOATDECIMAL 或等效数据类型)。

返回

返回 FLOATDECIMAL (定点)数字,具体取决于输入。

使用说明

  • 如果非 NULL 值的数量是大于或等于 1 的奇数,则返回非 NULL 值的中位数(“中心”)值。

  • 如果非 NULL 值的数量是偶数,则返回的值等于两个中心值的平均值。例如,如果值为 1、3、5 和 20,则返回 4(3 和 5 的平均值)。

  • 如果所有值均为 NULL,则返回 NULL。

  • 如果非 NULL 值的数量为 0,则返回 NULL。

  • 此函数不支持 DISTINCT。

  • 用作窗口函数时:

    • 此函数不支持:

      • OVER() 子句中的 ORDER BY 分子句。

      • 窗口框架。

示例

这显示了该函数的使用方法。

创建一个空表。

CREATE OR REPLACE TABLE aggr(k int, v decimal(10,2));
Copy

获取列 v 的 MEDIAN 值。该函数返回 NULL,因为没有行。

SELECT MEDIAN (v) FROM aggr;
+------------+
| MEDIAN (V) |
|------------|
|       NULL |
+------------+
Copy

插入一些行:

INSERT INTO aggr VALUES(1, 10), (1,20), (1, 21);
INSERT INTO aggr VALUES(2, 10), (2, 20), (2, 25), (2, 30);
INSERT INTO aggr VALUES(3, NULL);
Copy

获取每个组的 MEDIAN 值。请注意,由于组 k = 2 中的值数量是偶数,因此该组的返回值是两个中间数之间的中点。

SELECT k, MEDIAN(v) FROM aggr GROUP BY k ORDER BY k;
+---+-----------+
| K | MEDIAN(V) |
|---+-----------|
| 1 |  20.00000 |
| 2 |  22.50000 |
| 3 |      NULL |
+---+-----------+
Copy
语言: 中文