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

如何在Kusto中合并同表多计算列结果,按userId聚合展示?

问题

我正在尝试在Kusto中展示数据,但遇到了问题。目前我有三个可正常运行的查询:

MyTable1
| where data contains "Books" and page contains "page1" and metricType contains "Count"
| summarize arg_max_value_books = arg_max(value, *) by userId, data
| extend data, userId, booksCount= arg_max_value_books
| project data, userId, booksCount

该查询返回如下结果,Tools和Cars的查询逻辑类似:

Data   | userId   | booksCount
----------------------------------------
Books | 12312   | 4
Books | 51341   | 3
Books | 12245   | 0
MyTable1
| where data contains "Tools" and page contains "page1" and metricType contains "Count"
| summarize arg_max_value_tools = arg_max(value, *) by userId, data
| extend data, userId, toolsCount= arg_max_value_tools
| project data, userId, toolsCount
Data   | userId   | toolsCount
----------------------------------------
Tools| 12312    | 10
Tools| 51341    | 30
Tools| 12245    | 5
MyTable1
| where data contains "Cars" and page contains "page1" and metricType contains "Count"
| summarize arg_max_value_cars = arg_max(value, *) by userId, data
| extend data, userId, carsCount= arg_max_value_cars
| project data, userId, carsCount

我需要将这些结果合并,得到如下格式的数据:

userId   | toolsCount | booksCount | carsCount
----------------------------------------------------------------
12312    | 10                | 4                     | 0
51341    | 30                | 3                     | 2
12245    | 5                  | 0                     | 12

不确定应该使用merge、join、自连接还是其他方法,且网上多数示例都是与其他表连接,并非我需要的同表合并场景。

解决方法

不需要多次查询同一张表,也不用复杂的join操作,直接通过一次过滤+pivot函数就能实现需求,效率更高。

完整查询如下:

MyTable1
// 一次筛选出所有需要的数据类型,减少后续处理量
| where data in ("Books", "Tools", "Cars") and page contains "page1" and metricType contains "Count"
// 按用户和数据类型分组,取每个分组的最新value值
| summarize latest_value = arg_max(value, *) by userId, data
// 将data列的不同取值转成独立列,自动完成合并
| pivot data, any(latest_value)
// 重命名列名匹配需求格式
| rename any_Books to booksCount, any_Tools to toolsCount, any_Cars to carsCount
// 给缺失计数的用户补0,确保格式统一
| extend booksCount = coalesce(booksCount, 0), toolsCount = coalesce(toolsCount, 0), carsCount = coalesce(carsCount, 0)
// 按userId排序(可选操作)
| sort by userId

逻辑说明:

  1. 一次过滤:用data in ("Books", "Tools", "Cars")替代三次单独的contains,一次性筛选出所有目标数据,避免重复扫描表。
  2. 分组取最新值:通过summarize arg_max(value, *) by userId, data,实现和你之前三个查询完全一致的逻辑——获取每个用户每种数据类型的最新value。
  3. pivot转列:pivot函数直接将data的不同取值转成独立列,自动完成多组数据的合并,比多次join操作更简洁高效。
  4. 补0处理:用coalesce函数把缺失的计数(比如某用户没有Cars类型的数据)填充为0,保证结果格式统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:55:38