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

Postgres如何按指定type的多对多关联分类计数筛选games表记录

解法

最小改动方案(基于你现有语句扩展)

你只需要在子查询中关联categories表,增加type过滤条件即可,修改后的语句如下:

SELECT * FROM games WHERE id IN (
  SELECT gc.game_id 
  FROM game_category gc
  -- 关联分类表拿到type字段
  JOIN categories c ON gc.category_id = c.id
  -- 过滤你需要的指定type值,替换成实际的目标值即可
  WHERE c.type = '你要的目标type值'
  GROUP BY gc.game_id 
  -- 这里的5替换成你要的阈值x即可
  HAVING COUNT(*) >= 5
)

逻辑说明:

  • 子查询先关联关联表game_category和分类表categories,过滤出所有符合指定type的分类关联记录
  • 按游戏ID分组后统计每个游戏符合条件的分类数量,筛选出数量达标的游戏ID
  • 外层查询直接根据ID匹配拿到对应的游戏记录

扩展场景:同时校验总分类数和指定type分类数

如果你需要同时满足「总关联分类数≥N」+「指定type的分类数≥X」,可以用条件聚合实现,不需要多层子查询:

SELECT * FROM games WHERE id IN (
  SELECT gc.game_id 
  FROM game_category gc
  LEFT JOIN categories c ON gc.category_id = c.id
  GROUP BY gc.game_id 
  HAVING 
    -- 总关联分类数≥5(对应你原来的逻辑)
    COUNT(*) >=5
    -- 指定type的分类数≥3,可自行修改阈值和type值
    AND COUNT(CASE WHEN c.type = '你要的目标type值' THEN 1 END) >=3
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:51:01