MEDIAN¶
确定一组值的中位数。
语法¶
聚合函数
MEDIAN( <expr> )
窗口函数
MEDIAN( <expr> ) OVER ( [ PARTITION BY <expr2> ] )
实参¶
expr
表达式的计算结果必须为数值数据类型(
INTEGER
、FLOAT
、DECIMAL
或等效数据类型)。
返回¶
返回 FLOAT
或 DECIMAL
(定点)数字,具体取决于输入。
使用说明¶
如果非 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));获取列 v 的
MEDIAN
值。该函数返回 NULL,因为没有行。SELECT MEDIAN (v) FROM aggr; +------------+ | MEDIAN (V) | |------------| | NULL | +------------+插入一些行:
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);获取每个组的
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 | +---+-----------+