寻找一种在不折叠行的情况下计算聚合的方法

问题描述

正如标题所述,我想找到一种有效的方法来计算行组上的聚合而不会将这些行折叠在一起。例如,我想在下表中创建mean列。

|------------|---------|-------------|
|  category  |  value  | mean(value) |
|------------|---------|-------------|
|      A     |    1    |      3      |
|------------|---------|-------------|
|      A     |    3    |      3      |
|------------|---------|-------------|
|      A     |    5    |      3      |
|------------|---------|-------------|
|      B     |    1    |     1.5     |
|------------|---------|-------------|
|      B     |    2    |     1.5     |
|------------|---------|-------------|

到目前为止,我发现最好的方法是:

T
| join kind=leftouter (T | summarize avg() by category) on category

这似乎导致性能问题。我也知道使用partition by方法,但是需要支持超过64个类别。

我错过了执行此任务的好方法吗?

解决方法

您在这里:

let MyTable = datatable(Category:string,value:long) [
   "A",1,"A",3,5,"B",2
];
let Avgs = MyTable | summarize avg(value) by Category;
MyTable | lookup (Avgs) on Category 

这将完全输出您想要的内容。

说明:

  1. 首先,您创建一个临时表(使用let语句),名为Avgs,在其中您将获得每个类别的平均值。
  2. 您的主要声明是输出MyTable,但是对于每个类别,您还希望显示Avgs中的相关值,这是使用lookup运算符实现的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...