Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

MEDIAN 函数

计算一系列值的中值。忽略该范围中的 NULL 值。

MEDIAN 是一种假定连续分布模型的逆分布函数。

MEDIAN 是 PERCENTILE_CONT(.5) 的特殊情况。

语法

Copy
MEDIAN ( median_expression )

参数

median_expression

对其执行函数的目标列或表达式。

数据类型

返回类型由 median_expression 的数据类型确定。下表显示了每种 median_expression 数据类型的返回类型。

输入类型 返回类型
INT2、INT4、INT8、NUMERIC、DECIMAL DECIMAL
FLOAT、DOUBLE DOUBLE
DATE DATE
TIMESTAMP TIMESTAMP
TIMESTAMPTZ TIMESTAMPTZ

使用说明

如果 median_expression 参数是使用 38 位最大精度定义的 DECIMAL 数据类型,则 MEDIAN 可能将返回不准确的结果或错误。如果 MEDIAN 函数的返回值超过 38 位,则结果将截断以符合规范,这将导致精度降低。如果在插值期间,中间结果超出最大精度,则会发生数值溢出且函数会返回错误。要避免这些情况,建议使用具有较低精度的数据类型或将 median_expression 参数转换为较低精度。

如果语句包括对基于排序的聚合函数 (LISTAGG、PERCENTILE_CONT 或 MEDIAN) 的多个调用,则它们必须全都使用相同的 ORDER BY 值。请注意,MEDIAN 对表达式值应用隐式排序依据。

例如,以下语句将返回错误。

Copy
select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepaid; An error occurred when executing the SQL command: select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (pricepaid) from sales group by salesid, pricepai... ERROR: within group ORDER BY clauses for aggregate functions must be the same

以下语句将成功执行。

Copy
select top 10 salesid, sum(pricepaid), percentile_cont(0.6) within group (order by salesid), median (salesid) from sales group by salesid, pricepaid;

示例

以下示例显示,MEDIAN 生成和 PERCENTILE_CONT(0.5) 相同的结果。

Copy
select top 10 distinct sellerid, qtysold, percentile_cont(0.5) within group (order by qtysold), median (qtysold) from sales group by sellerid, qtysold; sellerid | qtysold | percentile_cont | median ---------+---------+-----------------+------- 1 | 1 | 1.0 | 1.0 2 | 3 | 3.0 | 3.0 5 | 2 | 2.0 | 2.0 9 | 4 | 4.0 | 4.0 12 | 1 | 1.0 | 1.0 16 | 1 | 1.0 | 1.0 19 | 2 | 2.0 | 2.0 19 | 3 | 3.0 | 3.0 22 | 2 | 2.0 | 2.0 25 | 2 | 2.0 | 2.0