先明确任务与结果
先定义计数对象,再检查左右表同键数量。用StudentID做左关联,本例应得到5行、3个不同学生、2名有选课记录的学生和4条匹配明细;保留S3的未匹配行。下载后逐项检查E1至E4,不能把结果行数当人数,也不能删除E4来凑数。
先摆出两张小表和统计问题
以下学生和课程均为虚构数据。学生表为 S1/Ada、S2/Bo、S3/Cy,StudentID 唯一。选课表四行:E1/S1/Math、E2/S1/Art、E3/S2/Math、E4/S2/Math。先问“总共有几名学生”和“有选课记录的学生有几名”,不要上来就要求AI返回一个含糊的总数。
E3 与 E4 课程名称相同,但选课记录ID不同。它们可能代表重复录入,也可能是业务允许的不同记录;这个例子只把它们作为四条输入明细,不能擅自按姓名或课程名删掉。身份碰撞的另一类问题可参照稳定ID与同名合并检查。
| EnrollmentID | StudentID | Course |
|---|---|---|
| E1 | S1 | Math |
| E2 | S1 | Art |
| E3 | S2 | Math |
| E4 | S2 | Math |
逐个学生展开左关联结果
PostgreSQL的关联规则说明用于解释匹配展开及左关联保留未匹配记录。本站数据清洗与分析已有按键关联入口,以下步骤使用这个浏览器工具,不要求安装数据库,也不把数据库全部功能当成本站能力。
手工先算:S1对应E1、E2,两行;S2对应E3、E4,两行;S3没有匹配,左关联仍留一行,所以2+2+1=5。工具导出把左右来源字段分开保留,未匹配右侧显示为空白;这与数据库文档里的null表示方式不同,空白本身也不能证明每一种缺失原因。
| StudentID / Name | EnrollmentID | Course |
|---|---|---|
| S1 / Ada | E1 | Math |
| S1 / Ada | E2 | Art |
| S2 / Bo | E3 | Math |
| S2 / Bo | E4 | Math |
| S3 / Cy | (未匹配) | (未匹配) |
先检查展开原因,再解释总数
AI总结:关联结果5行,因此有5名学生
学生3名;有选课记录的学生2名;选课明细4条;左关联结果5行
给每个指标单独写分子和单位
总学生数来自学生表三个不同 StudentID;选课人数来自有真实 EnrollmentID 的匹配学生,即 S1、S2 两个不同ID;匹配的选课记录是 E1 至 E4 共四条;结果行数才是五。每次输出数字都跟一个名词,例如“4条选课记录”,不要只写“总计4”。
S3 的空匹配不应变成一条“0号课程”,也不能因为关联行保留了它就说它已经选课。如果任务要求每人选课记录数,结果应为 S1:2、S2:2、S3:0,这个0是对已知表范围内匹配数量的统计,不是给缺失课程字段补造一个值。更多空值判断见缺失值与零的区别。
| 问题 | 本例答案 | 检查依据 |
|---|---|---|
| 学生总人数 | 3人 | 学生表不同StudentID |
| 有选课记录的人数 | 2人 | 有真实匹配的不同StudentID |
| 匹配选课记录数 | 4条 | 非空EnrollmentID:E1–E4 |
| 左关联结果行数 | 5行 | 2+2+1个展开结果 |
要求AI同时交出过程和异常
下面的提示词提供全部自编数据,适合检查模型是否能解释结果。不要用它证明某一模型准确率,也不要把真实学生身份信息粘贴进未经许可的服务。先在小样本重算,再把同一验收思路用于有权限处理的数据。
接收结果时,不只看最终的3、2、4、5。还要检查五行展开是否逐项对应输入,S3 是否保留,E3/E4 是否被静默合并,以及有没有添加输入中不存在的选课。把来源ID留在结果中,核查才不依赖AI的叙述。
仅使用这组虚构数据。
学生:S1 Ada;S2 Bo;S3 Cy。
选课:E1 S1 Math;E2 S1 Art;E3 S2 Math;E4 S2 Math。
按StudentID做左关联,逐行列出结果,未匹配右侧明确标记为空。
分别计算学生总人数、有选课记录的不同学生数、非空选课记录数、结果行数,并解释为何不同。
不要按课程名自动去重,不要添加课程或ID。列出需要人工确认的业务歧义。再查左表是否本身重复
如果学生表误录两条 S1,而右侧仍有两条 S1 选课记录,S1 就会产生2×2=4个配对。此时先回查左表的唯一性规则,不能用“关联本来就会变多”掩盖输入错误。相反,若左表确实每行代表不同学期,业务键可能需要加入学期;应重新定义关联条件。
不要靠对最终结果一键去重来修饰人数。这样可能同时删掉应保留的明细,又掩盖左表重复的根因。把“输入唯一性”“匹配数量”“指标口径”分别记录,任何一项不清楚都先保留待核查结论。
把五行结果交出去之前
- 输入表的行单位与StudentID唯一性规则已说明。
- 五行展开均能回到输入ID,S3空匹配被保留。
- 3人、2人、4条、5行分别有清楚的计数标签。
- E3/E4是否业务重复列为问题,未静默删除或擅自判断。
数字异常时先看哪里
每个人都多出很多行
检查左右两侧同键出现次数,排查多对多配对。
人数和记录数混在一起
重新定义单位,分别计算不同身份和非空明细。
未匹配者消失
核对是否用了只保留匹配项的关联方式,或后续筛选移除了空行。
从双表文件开始,完成一次可核对的左关联
下载本页练习ZIP,解压students.csv、enrolments.csv、students-duplicate.csv和expected.json。前三份是输入,expected是编辑计算的参考答案。正常练习只导入前两份,不把故障副本或答案当成第三张业务表。全部姓名与记录均为虚构教学数据。
导入后,“当前工作数据”默认只显示首张表,这不是文件丢失。关联操作使用左表、右表所选的两张原始表;不要先纵向追加,也不要仅清洗当前工作表后以为原始关联输入已被替换。
- 打开数据清洗与分析,一次选择students.csv与enrolments.csv。核对原始导入分别为3行与4行。
- 展开“关联与差异(原始表)”;左表选students,右表选enrolments,关联键选StudentID。
- 关联方式选“左关联:保留左表全部记录”,点击“按键关联”。
- 预览应有5行。检查S1对应E1/E2、S2对应E3/E4,S3右侧编号和课程为空白。
- 下载当前结果CSV,在独立目录重新打开;用来源列与编号核对五行,不把“7条原始输入→5行结果”中的7称作7人。
如果要继续在结果上汇总,先点“以当前结果继续处理”;重新运行关联仍读取所选原始表。需要更换关联输入时,修正文件后重新导入。
故障练习:七行不是删掉两行就能修好
另开工具页面,改用students-duplicate.csv和同一份enrolments.csv。故障主表有四行,其中S1/Ada完整重复一次;在这个练习规定的“一人一行”主表中,它是编辑故意设置的错误。左关联应得7行:S1四行、S2两行、S3一行。E1和E2各出现两次,是配对展开的结果。
不要对七行结果按StudentID去重,那会把S1的两门课及S2的两条有效明细一起丢掉。回查故障主表,按本例明确的身份唯一规则恢复students.csv,再与原选课表重新导入关联,应回到5行。真实主表若按“学生+学期”记行,应先定义复合键,不能把多学期记录按人删除。
交付时保存两份源CSV、实际关联CSV和口径说明:学生3人、选课学生2人、匹配明细4条、结果5行。E3/E4是否业务重复仍待业务规则判断。预期答案只核对这个小样本,不代表AI模型准确率或真实用户处理成功率。
| 核对对象 | 正常输入 | 重复主表输入 |
|---|---|---|
| 左表行数 / 不同StudentID | 3 / 3 | 4 / 3 |
| 左关联结果行数 | 5 | 7 |
| S1展开行数 | 2 | 4 |
| E1、E2各自出现次数 | 各1 | 各2 |
| 恢复动作 | 保留来源与口径 | 修正原主表,重新导入关联 |
常见问题
左关联五行是否一定出错?
不一定。本例三名学生对应2、2、0条选课记录,左关联仍保留未匹配学生,得到五行是预期。错的是把这五行直接称为五名学生。
同一学生同一课程能直接删重吗?
不能只看课程名决定。检查选课记录ID及业务规则,确认是重复录入、不同学期还是允许重复的记录,再决定怎样处理。
S3没有匹配,为什么每人记录数可以写0?
这里0表示在已知输入表范围内计数为零。关联结果中的课程字段仍是未匹配,不能给它伪造一个课程编号0或把其他未知信息也填成0。
参考资料与延伸阅读
按步骤开始处理
进入对应工具,预览处理结果,检查导出的文件。


