Postgres聚合操作中的过滤问题:任务表审核分歧数据处理
嘿,我来帮你搞定这个Postgres聚合过滤的问题!根据你的场景,我们需要找出那些两位审核者意见不一致的待审核实体,对吧?下面给你几个实用的解决方案:
1. 快速找出不一致的实体(仅返回实体名)
如果只需要知道哪些实体的审核意见有分歧,这个简洁的查询就够用了:
SELECT entity_name FROM tasks GROUP BY entity_name -- 可选:确保每个实体确实分配给了两位不同的审核者,过滤异常数据 HAVING COUNT(DISTINCT reviewer_email) = 2 AND MIN(result) <> MAX(result);
解释:
GROUP BY entity_name把同一个实体的所有审核记录归为一组COUNT(DISTINCT reviewer_email) = 2:这一步是可选的,但能帮你排除那些只分配给了一位审核者的异常记录(毕竟你的业务逻辑是每个实体生成两条任务)MIN(result) <> MAX(result):因为布尔类型的MIN是false,MAX是true,如果两者不相等,说明组里同时存在true和false的结果,也就是两位审核者意见不一致。
2. 查看不一致实体的详细审核信息
如果需要看到具体是哪两位审核者意见不合,以及他们各自的结果,可以用自连接的方式:
SELECT t1.entity_name, t1.reviewer_email AS 审核者1邮箱, t1.result AS 审核者1结果, t2.reviewer_email AS 审核者2邮箱, t2.result AS 审核者2结果 FROM tasks t1 JOIN tasks t2 ON t1.entity_name = t2.entity_name AND t1.reviewer_email <> t2.reviewer_email AND t1.result <> t2.result;
这个查询直接把同一个实体下,审核者不同且结果不同的记录配对起来,能直观看到每一组分歧的详情。
3. 兼容多审核者场景的通用写法
如果你的业务后续可能调整为一个实体分配更多审核者,只需要找出存在分歧的实体(不管有多少位审核者),可以用这个更通用的写法:
SELECT entity_name FROM tasks GROUP BY entity_name HAVING COUNT(DISTINCT result) = 2;
只要组内的result有两种不同的值,就说明存在意见不一致的情况,不管有多少位审核者参与。
内容的提问来源于stack exchange,提问作者user94154
相关产品推荐
相关产品推荐

