MEDIAN 函数
计算一系列值的中值。此范围内的 NULL
值将被忽略。
MEDIAN 是一种假定连续分布模型的逆分布函数。
MEDIAN 是 PERCENTILE_CONT 的特殊情况。
语法
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 对表达式值应用隐式排序依据。
例如,以下语句将返回错误。
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, pricepaid;
ERROR: within group ORDER BY clauses for aggregate functions must be the same
以下语句将成功运行。
SELECT TOP 10 salesid, SUM(pricepaid),
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales
GROUP BY salesid, pricepaid;
示例
以下示例使用 TICKIT 示例数据库。有关更多信息,请参阅 示例数据库。
以下示例显示,MEDIAN 生成和 PERCENTILE_CONT(0.5) 相同的结果。
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 |
+----------+---------+-----------------+--------+
| 2 | 2 | 2 | 2 |
| 26 | 1 | 1 | 1 |
| 33 | 1 | 1 | 1 |
| 38 | 1 | 1 | 1 |
| 43 | 1 | 1 | 1 |
| 48 | 2 | 2 | 2 |
| 48 | 3 | 3 | 3 |
| 77 | 4 | 4 | 4 |
| 85 | 4 | 4 | 4 |
| 95 | 2 | 2 | 2 |
+----------+---------+-----------------+--------+
以下示例查找每个 sellerid 的销售量中值。
SELECT sellerid,
MEDIAN(qtysold)
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;
+----------+--------+
| sellerid | median |
+----------+--------+
| 1 | 1.5 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1.5 |
| 8 | 1 |
| 9 | 4 |
| 12 | 2 |
+----------+--------+
要验证第一个 sellerid 的上一次查询的结果,请使用以下示例。
SELECT qtysold
FROM sales
WHERE sellerid=1;
+---------+
| qtysold |
+---------+
| 2 |
| 1 |
+---------+