You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在KQL中复用查询结果:计算分组最小平均差值

问题需求

现有KQL查询可计算每个group分组下各class的value平均值,并提取每个分组中平均最小的class:

let average = materialize(FooTable
| summarize avg_value = avg(value) by group, class
| summarize arg_min(avg_value, class) by group
)

该查询输出示例(每个分组下平均最小的class):

groupclassavg_value
G1C1100
G2C2150
......

现在需要实现:展示所有group、class、value的相关行,同时计算每行数值与对应分组最小类平均值的差值(delta)。当前有查询框架,需补充获取分组最小类平均值的逻辑:

FooTable
| where value > ( 此处需插入获取分组最小类平均值的查询 )

期望输出示例:

groupclassmin_avg_valuedelta
G1C11000
G1C212020
G2C120050
G2C21500
........
解决方案

可以通过子查询+关联的方式实现,先计算每个分组的最小平均value,再关联回目标数据计算差值:

方案1:输出group+class聚合后的差值结果

// 缓存每个分组的最小平均value
let group_min_avg = materialize(
    FooTable
    | summarize avg_value = avg(value) by group, class
    | summarize min_avg_value = min(avg_value) by group
);

// 关联数据并计算差值
FooTable
| summarize avg_value = avg(value) by group, class
| join kind=inner group_min_avg on group
| extend delta = avg_value - min_avg_value
| project group, class, min_avg_value, delta

方案2:保留原始每行数据并计算差值

如果需要展示原始表的每一行而非聚合结果,可调整为:

let group_min_avg = materialize(
    FooTable
    | summarize avg_value = avg(value) by group, class
    | summarize min_avg_value = min(avg_value) by group
);

FooTable
| join kind=inner group_min_avg on group
| extend delta = value - min_avg_value
| project group, class, value, min_avg_value, delta

关键说明

  • materialize()用于缓存中间计算结果,避免重复执行相同逻辑,提升查询性能
  • 两次summarize嵌套:先计算每个group+class的平均值,再提取每个group下的最小平均值
  • 通过join将目标数据与分组最小平均值关联,最后用extend生成delta差值字段

内容的提问来源于stack exchange,提问作者Kevindra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:24:26