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

使用聚合计数窗口函数筛选同名行的SQL查询问题

解决方案:筛选出具有多个相同name的行

你的原查询已经通过窗口函数计算出了每个name对应的version数量,但缺少关键的筛选步骤——没有过滤掉那些计数≤1的行。要得到你预期的结果,只需要在计算完计数后,再添加一层筛选条件,保留count > 1的行即可。

方法1:使用CTE(公共表表达式)

这种写法可读性更强,适合后续可能扩展的复杂查询:

WITH name_version_counts AS (
    SELECT 
        version, 
        name, 
        COUNT(version) OVER (PARTITION BY name) AS count
    FROM application 
    WHERE id = 123
)
SELECT version, name, count
FROM name_version_counts
WHERE count > 1;

方法2:使用子查询

如果你的数据库版本不支持CTE,或者更习惯子查询的写法,可以用这个版本:

SELECT version, name, count
FROM (
    SELECT 
        version, 
        name, 
        COUNT(version) OVER (PARTITION BY name) AS count
    FROM application 
    WHERE id = 123
) AS sub_query
WHERE count > 1;

补充说明

  • 原结果中出现count = 0的行,是因为这些name对应的version字段为NULL,COUNT(version)会忽略NULL值,所以计数为0。如果需要统计包含NULL版本的总行数,可以把COUNT(version)改成COUNT(*),但根据你的预期结果,当前的COUNT(version)是符合需求的。
  • 窗口函数OVER (PARTITION BY name)会给同一name的所有行都带上相同的计数值,所以外层只需要筛选count > 1,就能把该name下的所有行都保留下来,正好符合你想要的Mouser两行的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:46:40