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

PostgreSQL:如何筛选对应指定fid行val一致的ID?

PostgreSQL 查询满足特定条件的ID

我有如下PostgreSQL数据表:

id        fid        val 
--------------------------
200       995        XXLL
200       996        XXLL
201       995        OOOP
201       996        OOOS
202       995        OKIL
202       996        OKIL
203       995        LLLL
203       996        CCCC

需要获取所有满足以下条件的id:

  • 该id同时存在fid为995和996的两行记录
  • 这两行的val值完全相同

预期输出为200、202,因为201和203对应的fid的val值不一致。


方法1:自连接查询

通过将表与自身连接,匹配相同id、不同fid且val相等的记录:

SELECT DISTINCT t1.id
FROM your_table t1
JOIN your_table t2 ON t1.id = t2.id
WHERE t1.fid = 995 
  AND t2.fid = 996 
  AND t1.val = t2.val;

方法2:分组聚合验证

先按id和val分组,筛选出同时包含995和996两个fid的组:

SELECT id
FROM your_table
WHERE fid IN (995, 996)
GROUP BY id, val
HAVING COUNT(DISTINCT fid) = 2;

方法3:窗口函数筛选

使用窗口函数计算每个id下val的唯一值数量,以及fid的覆盖情况:

WITH id_stats AS (
  SELECT 
    id,
    COUNT(DISTINCT fid) AS fid_count,
    COUNT(DISTINCT val) AS val_count
  FROM your_table
  WHERE fid IN (995, 996)
  GROUP BY id
)
SELECT id
FROM id_stats
WHERE fid_count = 2 AND val_count = 1;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:23:08