> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> 使用 t-digest 算法在不同级别同时计算多个近似分位数，并将每个元素的权重纳入考虑。

# quantilesTDigestWeighted

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

引入版本：v20.1.0

使用 [t-digest](https://github.com/tdunning/t-digest/blob/master/docs/t-digest-paper/histo.pdf) 算法，同时计算数值数据序列在不同级别上的多个近似[分位数](https://en.wikipedia.org/wiki/Quantile)。
该函数会将序列中每个成员的权重纳入计算。

此函数等同于 [`quantileTDigestWeighted`](/docs/zh/reference/functions/aggregate-functions/quantileTDigestWeighted)，但支持在一次遍历中计算多个分位数级别，因此比逐个调用分位数函数更高效。

最大误差为 1%。内存消耗为 `log(n)`，其中 `n` 是值的数量。

该函数的性能低于 [`quantiles`](/docs/zh/reference/functions/aggregate-functions/quantiles) 和 [`quantilesTiming`](/docs/zh/reference/functions/aggregate-functions/quantilesTiming)。
但从状态大小与精度的比率来看，此函数明显优于 `quantiles`。

结果取决于查询的运行顺序，因此是非确定性的。

<Note>
  不建议将 `quantilesTDigestWeighted` [用于很小的数据集](https://github.com/tdunning/t-digest/issues/167#issuecomment-828650275)，否则可能会产生显著误差。
  在这种情况下，可以考虑改用 [`quantilesTDigest`](/docs/zh/reference/functions/aggregate-functions/quantilesTDigest)。
</Note>

**语法**

```sql theme={null}
quantilesTDigestWeighted(level1, level2, ...)(expr, weight)
```

**参数**

* `level` — 分位数的级别。一个或多个介于 0 到 1 之间的常量浮点数。建议将 `level` 的值设在 `[0.01, 0.99]` 范围内。[`Float*`](/docs/zh/reference/data-types/float)

**参数说明**

* `expr` — 基于列值计算的表达式，结果类型为数值数据类型、`Date` 或 `DateTime`。[`(U)Int*`](/docs/zh/reference/data-types/int-uint) 或 [`Float*`](/docs/zh/reference/data-types/float) 或 [`Date`](/docs/zh/reference/data-types/date) 或 [`DateTime`](/docs/zh/reference/data-types/datetime)
* `weight` — 包含序列中各元素权重的列。权重表示某个值出现的次数。[`UInt*`](/docs/zh/reference/data-types/int-uint)

**返回值**

返回按指定级别顺序排列的近似分位数组。对于 `Date` 和 `DateTime` 输入，输出格式与输入格式一致。[`Array(Float32)`](/docs/zh/reference/data-types/array) 或 [`Array(Date)`](/docs/zh/reference/data-types/array) 或 [`Array(DateTime)`](/docs/zh/reference/data-types/array)

**示例**

**使用 t-digest 计算多个加权分位数**

```sql title=Query theme={null}
SELECT quantilesTDigestWeighted(0.25, 0.5, 0.75)(number, 1) FROM numbers(100);
```

```response title=Response theme={null}
┌─quantilesTDigestWeighted(0.25, 0.5, 0.75)(number, 1)──┐
│ [24.75,49.5,74.25]                                    │
└───────────────────────────────────────────────────────┘
```
