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

如何在PostgreSQL中筛选完成指定全部项目的用户

筛选完成全部指定项目的PostgreSQL查询方案

方法一:分组统计符合条件的项目数

这是最直观的方案,通过分组统计每个用户完成的目标项目数量来筛选:

SELECT user_id
FROM your_table_name
WHERE status = 'finished'
  AND project IN ('p1', 'p2', 'p3')
GROUP BY user_id
HAVING COUNT(DISTINCT project) = 3;

说明

  • 先通过WHERE过滤出已完成且属于目标项目的有效记录,排除无关数据
  • 按user_id分组后,COUNT(DISTINCT project)统计用户完成的不同目标项目数(如果表中不会出现同一用户同一项目的重复完成记录,可去掉DISTINCT)
  • HAVING子句筛选出完成全部3个目标项目的用户

方法二:多重EXISTS关联验证

通过多次关联表,确保用户同时存在三个项目的完成记录:

SELECT DISTINCT t1.user_id
FROM your_table_name t1
WHERE t1.status = 'finished'
  AND t1.project = 'p1'
  AND EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.user_id = t1.user_id
      AND t2.status = 'finished'
      AND t2.project = 'p2'
  )
  AND EXISTS (
    SELECT 1
    FROM your_table_name t3
    WHERE t3.user_id = t1.user_id
      AND t3.status = 'finished'
      AND t3.project = 'p3'
  );

说明

  • 主查询先定位完成p1的用户,再通过两个EXISTS子查询分别验证该用户是否完成了p2和p3
  • DISTINCT用于避免同一用户因存在多条p1记录而被重复返回
  • 若给表建立(user_id, project, status)联合索引,该方案的查询性能会更优

注意事项

  • 请将代码中的your_table_name替换为你实际使用的表名
  • 两种方案各有适用场景:分组统计适合目标项目数量较多的情况;多重EXISTS在项目数量少的时候性能表现更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:53:10