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

查询public.message表中仅出现一次的subject_key

问题分析与解决方案

你的SQL查询问题出在使用row_number()窗口函数的逻辑上:row_number()会给每个subject_key分组内的行依次编号,哪怕某个subject_key对应100条记录,分组里的第一条记录rn依然是1。所以你的查询会返回所有subject_key的至少一条记录,而不是仅出现一次的subject_key。

正确的查询方案

方案1:使用GROUP BY + HAVING(最直接高效)

SELECT subject_key
FROM public.message
GROUP BY subject_key
HAVING COUNT(*) = 1
LIMIT 10;

这个方案通过分组统计每个subject_key的总记录数,只保留统计结果等于1的subject_key。

方案2:使用COUNT()窗口函数

如果你想保留窗口函数的写法,可以用COUNT()替代row_number():

WITH cte AS (
  SELECT 
    subject_key,
    COUNT(*) OVER (PARTITION BY subject_key) AS total_count
  FROM public.message
)
SELECT DISTINCT subject_key
FROM cte
WHERE total_count = 1
LIMIT 10;

这里窗口函数COUNT(*) OVER (PARTITION BY subject_key)会计算每个subject_key对应的总记录数,之后筛选总记录数为1的条目,用DISTINCT确保每个subject_key只返回一次。

内容的提问来源于stack exchange,提问作者D. Hoffman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:34:54