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

PostgreSQL:如何筛选同一userid对应唯一dobyr的记录

筛选仅含唯一dobyr的userid记录(PostgreSQL)

针对你的需求,这里提供两种简洁高效的SELECT语句方案,均无需修改原表:

方案一:窗口函数实现(推荐,单表扫描更高效)

SELECT DISTINCT userid, dobyr
FROM (
    SELECT 
        userid, 
        dobyr,
        COUNT(DISTINCT dobyr) OVER (PARTITION BY userid) AS dobyr_unique_count
    FROM userinteractions
) AS filtered
WHERE dobyr_unique_count = 1;

逻辑说明

  1. 内层子查询通过窗口函数COUNT(DISTINCT dobyr) OVER (PARTITION BY userid),计算每个userid对应的不同dobyr值的数量,命名为dobyr_unique_count。
  2. 外层筛选出dobyr_unique_count = 1的记录,即该userid所有记录的dobyr完全一致。
  3. 用DISTINCT去重,确保每个userid只返回一条记录。

方案二:GROUP BY + 子查询实现

SELECT userid, MIN(dobyr) AS dobyr
FROM userinteractions
WHERE userid IN (
    SELECT userid
    FROM userinteractions
    GROUP BY userid
    HAVING COUNT(DISTINCT dobyr) = 1
)
GROUP BY userid;

逻辑说明

  1. 子查询先找出所有dobyr值唯一的userid(通过GROUP BY userid + HAVING COUNT(DISTINCT dobyr) = 1)。
  2. 外层查询基于这些合法userid,通过GROUP BY userid取任意一个dobyr(因为该userid的dobyr全部一致,用MIN/MAX都可以)。

结果验证

针对你的示例输入数据,两个方案都会输出符合预期的结果:

userid,dobyr
1,1995
2,1999
4,1989

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:20:35