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

PostgreSQL按Region聚合数据,排除跨多区域的ID行

PostgreSQL 按Region聚合时排除跨区域ID的解决方案

要实现按Region聚合数据,同时排除那些在多个Region中存在的ID对应的所有行,核心思路是先筛选出仅属于单个Region的ID,再基于这些ID过滤原表后进行聚合。以下是两种可行的实现方式:

方法一:子查询筛选符合条件的ID

通过子查询先找出所有只对应一个Region的ID,再用这些ID过滤原表数据,最后执行聚合:

SELECT region, COUNT(id), SUM(amount)
FROM table1
WHERE id IN (
    -- 筛选出仅属于单个Region的ID
    SELECT id
    FROM table1
    GROUP BY id
    HAVING COUNT(DISTINCT region) = 1
)
GROUP BY region;

方法二:窗口函数标记跨区域ID

使用窗口函数为每个ID计算其关联的不同Region数量,再过滤掉数量大于1的记录后聚合:

WITH id_region_stats AS (
    SELECT 
        *,
        -- 计算每个ID对应的不同Region数量
        COUNT(DISTINCT region) OVER (PARTITION BY id) AS region_count
    FROM table1
)
SELECT region, COUNT(id), SUM(amount)
FROM id_region_stats
WHERE region_count = 1 -- 仅保留单区域ID的记录
GROUP BY region;

执行结果

两种方法都会得到你期望的结果:

regioncountsum
west110
north350

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:54