> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 使用线性插值并结合每个元素的权重，计算数值数据序列的分位数。

# quantileExactWeightedInterpolated

<div id="quantileExactWeightedInterpolated">
  ## quantileExactWeightedInterpolated
</div>

引入版本：v24.10.0

使用线性插值计算数值数据序列的[分位数](https://en.wikipedia.org/wiki/Quantile)，并考虑每个元素的权重。

为了得到插值后的值，会先将所有传入的值合并到一个数组中，然后按照对应的权重排序。
接着，基于权重构建累积分布，并使用[加权百分位数方法](https://en.wikipedia.org/wiki/Percentile#The_weighted_percentile_method)进行分位数插值，再结合权重和值通过线性插值计算分位数。

如果在同一个查询中使用多个 level 不同的 `quantile*` 函数，它们的内部状态不会合并 (也就是说，查询的执行效率会低于可达到的水平) 。
在这种情况下，请使用 [quantiles](/zh/reference/functions/aggregate-functions/quantiles#quantiles) 函数。

我们强烈建议使用 `quantileExactWeightedInterpolated` 而不是 `quantileInterpolatedWeighted`，因为 `quantileExactWeightedInterpolated` 比 `quantileInterpolatedWeighted` 更准确。
更多细节请参见下面的示例。

**语法**

```sql theme={null}
quantileExactWeightedInterpolated(level)(expr, weight)
```

**别名**: `medianExactWeightedInterpolated`

**参数**

* `level` — 可选。分位数级别。取值为 0 到 1 之间的常量浮点数。建议将 `level` 设为 `[0.01, 0.99]` 范围内的值。默认值：0.5。当 `level=0.5` 时，函数计算中位数。[`Float*`](/zh/reference/data-types/float)

**实参**

* `expr` — 针对列值计算后得到数值数据类型、Date 或 DateTime 的表达式。[`(U)Int*`](/zh/reference/data-types/int-uint) 或 [`Float*`](/zh/reference/data-types/float) 或 [`Decimal*`](/zh/reference/data-types/decimal) 或 [`Date`](/zh/reference/data-types/date) 或 [`DateTime`](/zh/reference/data-types/datetime)
* `weight` — 包含序列成员权重的列。权重表示值出现的次数。[`UInt*`](/zh/reference/data-types/int-uint)

**返回值**

指定级别的分位数。[`Float64`](/zh/reference/data-types/float) 或 [`Date`](/zh/reference/data-types/date) 或 [`DateTime`](/zh/reference/data-types/datetime)

**示例**

**计算精确加权插值分位数**

```sql title=Query theme={null}
SELECT quantileExactWeightedInterpolated(n, val) FROM t;
```

```response title=Response theme={null}
┌─quantileExactWeightedInterpolated(n, val)─┐
│                                       1.5 │
└───────────────────────────────────────────┘
```

**优先选择 quantileExactWeightedInterpolated，而非 quantileInterpolatedWeighted**

```sql title=Query theme={null}
SELECT
    quantileExactWeightedInterpolated(0.99)(number, 1),
    quantile(0.99)(number),
    quantileInterpolatedWeighted(0.99)(number, 1)
FROM numbers(9)
```

```response title=Response theme={null}
┌─quantileExactWeightedInterpolated(0.99)(number, 1)─┬─quantile(0.99)(number)─┬─quantileInterpolatedWeighted(0.99)(number, 1)─┐
│                                               7.92 │                   7.92 │                                             8 │
└────────────────────────────────────────────────────┴────────────────────────┴───────────────────────────────────────────────┘
```

**另请参阅**

* [median](/zh/reference/functions/aggregate-functions/median)
* [quantiles](/zh/reference/functions/aggregate-functions/quantiles)
