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

如何编写SQL分组查询,确保组内所有person_id在指定查询结果中

筛选所有成员均符合条件的分组ID

需求说明

我们需要从你的第二张分组表(假设表名为person_groups,请替换为实际表名)中,找出所有**分组内的person_id全部属于“仅拥有1个订单的用户”**的ID。其中,“仅拥有1个订单的用户”可通过以下查询获取:

SELECT person_id
FROM orders
GROUP BY person_id
HAVING COUNT(order_id) = 1

两种直接实现方式

方式1:反向排除不符合的分组

通过NOT EXISTS判断分组中是否存在不符合条件的person_id,不存在则保留该分组:

SELECT DISTINCT pg.ID
FROM person_groups pg
WHERE NOT EXISTS (
    SELECT 1
    FROM person_groups pg_inner
    WHERE pg_inner.ID = pg.ID
      AND pg_inner.person_id NOT IN (
          SELECT person_id
          FROM orders
          GROUP BY person_id
          HAVING COUNT(order_id) = 1
      )
)

方式2:正向验证匹配数量

统计每个分组内符合条件的person_id数量,若等于分组总人数,则说明该分组所有成员都符合要求:

SELECT pg.ID
FROM person_groups pg
LEFT JOIN (
    -- 先获取符合条件的person_id列表
    SELECT person_id
    FROM orders
    GROUP BY person_id
    HAVING COUNT(order_id) = 1
) qualified ON pg.person_id = qualified.person_id
GROUP BY pg.ID
HAVING COUNT(pg.person_id) = COUNT(qualified.person_id)

逻辑解释

  • 方式1的核心是排除法:只要分组里有一个person_id不在目标列表中,就剔除这个分组,剩下的就是全部符合要求的分组。
  • 方式2的核心是数量匹配:分组总人数等于符合条件的人数,意味着没有成员被排除,即所有人都符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:15:14