如何在Kusto中按条件聚合求和,新增totalExamsTaken列?
可以实现,以下是具体的Kusto查询方案
方案一:先统计再关联(推荐,性能更优)
通过先统计学生每学年的考试次数,再关联学生基本信息,避免处理大量重复数据:
// 统计每个学生每学年的考试总次数 let exam_yearly_counts = StudentExams | summarize totalExamsTaken = count() by studentID, schoolYear; // 关联学生信息与统计结果,输出目标列 StudentInfo | join kind=inner exam_yearly_counts on studentID | project studentID, studentName, age, gender, schoolYear, totalExamsTaken | sort by studentID, schoolYear desc
方案二:使用分区统计(基于原有查询修改)
如果需要基于你现有的查询逻辑调整,可以用partition by实现分区统计,再去重得到唯一行:
StudentInfo | lookup StudentExams on studentID // 按学生ID和学年分区,统计该分区内的考试次数 | partition by studentID, schoolYear ( extend totalExamsTaken = count() ) // 去重保留每个学生每学年的唯一记录 | distinct studentID, studentName, age, gender, schoolYear, totalExamsTaken | sort by studentID, schoolYear desc
补充说明
- 方案一用
summarize先聚合统计,再关联学生信息,性能更高效,适合数据量较大的场景。 - 如果需要保留所有学生(包括无考试记录的),可以将
join kind=inner改为join kind=leftouter,并添加| extend totalExamsTaken = coalesce(totalExamsTaken, 0)将空值转为0。
内容的提问来源于stack exchange,提问作者superninja
相关产品推荐
相关产品推荐

