

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# MEDIAN 开窗函数
<a name="r_WF_MEDIAN"></a>

计算某个窗口或分区中值的范围的中间值。忽略该范围中的 NULL 值。

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

## 语法
<a name="r_WF_MEDIAN-synopsis"></a>

```
MEDIAN ( median_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## 参数
<a name="r_WF_MEDIAN-arguments"></a>

 *median\$1expression*   
一个提供要为其确定中间值的值的表达式（例如列名）。该表达式必须具有数字数据类型或日期时间数据类型或可隐式转换为 1。

OVER   
一个指定窗口分区的子句。OVER 子句不能包含窗口排序或窗口框架规范。

PARTITION BY *partition\$1expression*   
可选。一个设置 OVER 子句中每个组的记录范围的表达式。

## 数据类型
<a name="r_WF_MEDIAN-data-types"></a>

返回类型由 *median\$1expression* 的数据类型确定。下表显示了每种 *median\$1expression* 数据类型的返回类型。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/r_WF_MEDIAN.html)

## 使用说明
<a name="r_WF_MEDIAN-data-usage-notes"></a>

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

例如，带 DECIMAL 参数的 SUM 函数返回 38 位的默认精度。结果的小数位数与参数的小数位数相同。因此，例如，DECIMAL(5,2) 列的 SUM 返回 DECIMAL(38,2) 数据类型。

以下示例在 MEDIAN 函数的 *median\$1expression* 参数中使用 SUM 函数。PRICEPAID 列的数据类型是 DECIMAL (8,2)，因此 SUM 函数返回 DECIMAL(38,2)。

```
select salesid, sum(pricepaid), median(sum(pricepaid)) 
over() from sales where salesid < 10 group by salesid;
```

要避免潜在的精度降低或溢出错误，请将结果转换为具有较低精度的 DECIMAL 数据类型，如以下示例所示。

```
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) 
over() from sales where salesid < 10 group by salesid;
```

## 示例
<a name="r_WF_MEDIAN-examples"></a>

 以下示例计算每个卖家的平均销售数量：

```
select sellerid, qty, median(qty) 
over (partition by sellerid) 
from winsales
order by sellerid;


sellerid	qty	median
---------------------------
1		10	10.0
1		10	10.0
1		30	10.0
2		20	20.0
2		20	20.0
3		10	17.5
3		15	17.5
3		20	17.5
3		30	17.5
4		10	25.0
4		40	25.0
```

有关 WINSALES 表的说明，请参阅[窗口函数示例的示例表](c_Window_functions.md#r_Window_function_example)。