You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL补全:筛选恰好含指定2个联系人且总成员数为2的分组

解决方案

你原SQL的问题出在WHERE阶段提前过滤了contact_id不是1、3的记录,导致统计不到分组的真实总人数,没法做总人数=2的校验。这里用条件聚合一次跑完两个校验规则就行,不需要多表关联,性能更好:

SELECT `group_id`
FROM `TaskTeam_member`
GROUP BY `group_id`
HAVING
  -- 校验同时包含联系人1、3
  COUNT(DISTINCT CASE WHEN contact_id IN (1,3) THEN contact_id END) = 2
  -- 校验分组总成员数恰好为2
  AND COUNT(DISTINCT contact_id) = 2

逻辑解释

  • 去掉原SQL里的WHERE过滤条件,分组统计时能覆盖组内所有成员,拿到真实总人数
  • 用CASE表达式单独统计组内属于1、3的联系人去重数量,等于2就说明两个联系人都在组里
  • 两个条件同时满足才会返回,执行后只会得到你要的group_id=2的结果

如果你更习惯子查询的写法,也可以用下面的等价版本,只是性能比上面的写法差一点,数据量小的时候没有区别:

SELECT t.group_id
FROM (
  -- 原逻辑:筛选同时包含1、3的分组
  SELECT group_id ,COUNT(DISTINCT contact_id) AS variants 
  FROM TaskTeam_member 
  WHERE contact_id IN (1,3)
  GROUP BY group_id 
  HAVING variants=2 
) t
INNER JOIN (
  -- 统计每个分组的总成员数
  SELECT group_id, COUNT(DISTINCT contact_id) AS total_cnt
  FROM TaskTeam_member
  GROUP BY group_id
) t2 ON t.group_id = t2.group_id
WHERE t2.total_cnt = 2

注意:如果业务上保证同一个contact_id不会在同一个group_id下重复存储,COUNT里的DISTINCT可以去掉,能进一步提升查询速度。

内容的提问来源于stack exchange,提问作者Sad_Clown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:57:19