SonnetDB 统计聚合函数stddev/variance/spread/median/modeSonnetDB 的统计聚合用于观察时序数据的波动、跨度和常见状态。本文介绍 stddev、variance、spread、median 和 mode重点说明样本统计、中位数估计和类型边界。内容按 2026-10-11 当前工作树文档与源码审阅以下 SQL 是使用示例本轮没有实际执行或测量性能也不据此认定所有已发行客户端具有相同能力。一次观察多项统计假设测试数据库中已有 sensors measurement声明 device TAG、temperature FIELD FLOAT 和 status FIELD STRING并具备读取权限。下面的查询限定同一设备和时间范围时间戳使用 Unix 毫秒。SELECTcount(temperature),avg(temperature),stddev(temperature),variance(temperature),spread(temperature),median(temperature),mode(status)FROMsensorsWHEREdevicesensor-01ANDtime1700000000000ANDtime1700003600000;count(temperature)同时显示有效采样数量。字段稀疏或采样频率改变时统计值的可比性也会改变不能只看函数名就认为两个时间段对应相同样本条件。标准差和方差采用样本统计stddev和variance使用样本统计分母为 n-1有效样本不足两个时聚合结果返回 NULL。不要直接把它们当作总体方差也不要在单点输入下期待标准差必定为 0。这两种函数的底层状态使用 Welford 在线更新并支持合并。它们维护计数、均值和平方差累积量这不意味着其余统计函数全部使用同一种算法也不构成整条查询的性能验收。数值范围、异常输入和实际数据规模仍需分别验证。五个函数的含义函数回答的问题使用边界stddev样本波动幅度多大与原字段单位相同不足两个有效样本为 NULLvariance样本方差多大单位为原字段单位的平方分母为 n-1spread最大值与最小值相差多少容易受离群点影响median数据中心位置在哪里使用 T-Digest 估计不保证精确排序中位数mode哪个值出现最多并列选择较小值字符串比较使用 Ordinal数值统计接受数值 FIELD不能对字符串温度直接计算标准差。mode另支持 Boolean 和 String因此可用于最常见状态字符串并列时的 Ordinal 顺序不等于中文拼音顺序。让不同时间段的比较有意义比较前先固定设备、时间范围、字段类型和采样策略。设备采样频率不同混合样本统计会受到样本数量影响不能自动解释成每台设备等权。平均值与中位数的差异也不足以单独证明数据服从某种分布。SELECTtime,count(temperature),avg(temperature),stddev(temperature),spread(temperature)FROMsensorsWHEREdevicesensor-01ANDtime1700000000000ANDtime1700003600000GROUPBYtime(1m);按分钟比较时显式投影time才返回桶起始时间。报警阈值需要由实际业务数据和误报成本决定本文未给出未经测量的告警保证。本文依据当前 SQL 参考、ExtendedAggregateFunctions.cs与 Welford 状态实现审阅。函数实现、示例可用性和生产性能是分别需要证据的事项本轮只完成文档与源码核查。