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

如何按realm_id聚合PostgreSQL表,根据状态标记active/inactive

解决方案

可以通过聚合函数结合条件判断来实现需求,以下是两种简洁的实现方式:

方法一:使用BOOL_OR聚合函数

SELECT 
  realm_id,
  CASE 
    WHEN BOOL_OR(status NOT IN ('closed', 'denied')) THEN 'active'
    ELSE 'inactive'
  END AS status
FROM my_table
GROUP BY realm_id;

逻辑说明

  • BOOL_OR(expr)会返回分组内是否存在至少一条记录满足表达式expr为真
  • 这里判断分组内是否有状态既不是closed也不是denied的记录,若存在则标记为active,否则标记为inactive
  • 最后按realm_id分组聚合得到结果

方法二:使用COUNT统计符合条件的记录数

SELECT 
  realm_id,
  CASE 
    WHEN COUNT(CASE WHEN status NOT IN ('closed', 'denied') THEN 1 END) > 0 THEN 'active'
    ELSE 'inactive'
  END AS status
FROM my_table
GROUP BY realm_id;

逻辑说明

  • 内层CASE语句仅对状态非closed/denied的记录返回1,其余返回NULL
  • COUNT()函数会忽略NULL值,统计符合条件的记录数量
  • 若数量大于0则说明存在目标记录,标记为active,否则为inactive

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:12:33