PostgreSQL统计不同组间列值有差异的实体数量的简化查询方法
解决方案
可以通过分组聚合的方式实现需求,写法更简洁,同时天然支持3个及以上分组的对比场景:
SELECT COUNT(*) FROM ( SELECT entity_id FROM table1 -- 需对比哪些分组直接在 IN 中修改即可 WHERE entity_group IN ('A', 'B') GROUP BY entity_id HAVING COUNT(DISTINCT value) > 1 ) AS qualified_entity;
逻辑说明
- 内层查询按
entity_id分组,统计每个实体在指定分组下的value去重后的数量 HAVING COUNT(DISTINCT value) > 1筛选出存在取值差异的实体- 外层直接统计符合条件的实体总数即可
扩展说明
如果需要对比3个、4个分组,仅需要修改WHERE条件中IN的枚举值即可,无需调整其他逻辑,比如对比A、B、C三个分组的写法:
SELECT COUNT(*) FROM ( SELECT entity_id FROM table1 WHERE entity_group IN ('A', 'B', 'C') GROUP BY entity_id HAVING COUNT(DISTINCT value) > 1 ) AS qualified_entity;
如果你的统计规则要求实体必须在所有待对比分组中都存在才纳入统计,可以在HAVING条件中增加分组数量校验,比如对比3个分组时加COUNT(DISTINCT entity_group) = 3即可:
SELECT COUNT(*) FROM ( SELECT entity_id FROM table1 WHERE entity_group IN ('A', 'B', 'C') GROUP BY entity_id HAVING COUNT(DISTINCT value) > 1 AND COUNT(DISTINCT entity_group) = 3 ) AS qualified_entity;
内容的提问来源于stack exchange,提问作者rambalachandran
相关产品推荐
相关产品推荐

