在kdb/q中,需用哪种Join合并表以统计有效赛事分数?
在kdb/q中实现所需表连接的方法
你需要使用**左连接(Left Join)**来实现这个需求,在kdb/q中对应的操作是lj(或left join),它会保留左表(participants)的所有记录,同时将右表(races)中匹配的列合并进来。
步骤1:创建源表
首先在q中定义两张源表:
// 初始化participants表 participants:([] Name:(`Ann;`Bob;`Ann;`Bob); Score:(66;20;73;25); Race:(`8a;`8a;`7d;`7d)) // 初始化races表 races:([] Race:(`8a;`7d); included:(0;1))
步骤2:执行左连接
通过lj命令,以Race列为匹配键,将两张表合并:
// 按Race列执行左连接,生成组合表 combined_table: participants lj `Race xkey races
执行后得到的combined_table就是你需要的目标表:
| Name | Score | Race | included |
|---|---|---|---|
| Ann | 66 | 8a | 0 |
| Bob | 20 | 8a | 0 |
| Ann | 73 | 7d | 1 |
| Bob | 25 | 7d | 1 |
步骤3:统计计入最终统计的赛事得分
基于组合表,你可以直接过滤并统计:
// 筛选included=1的记录,按姓名汇总得分 select sum Score by Name from combined_table where included=1
输出结果:
| Name | Score |
|---|---|
| Ann | 73 |
| Bob | 25 |
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

