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

PostgreSQL使用ARRAY_AGG返回合并数组,如何得到单游戏对应国家ID数组

问题根因

你编写的CTE中仅按user_id分组,会将对应用户名下所有游戏的国家ID全部聚合到同一个数组中,因此user_id=1的两个游戏返回的都是该用户所有游戏关联的国家ID合集(Monopoly关联的1、2、3加Zelda关联的2,合并为{1,2,3,2}),不符合按单个游戏聚合的需求。

修复方案

将聚合的分组键调整为游戏ID,每个游戏单独聚合自身关联的国家ID即可,有两种常用写法:

写法1:简化版(无需CTE)

SELECT 
    g.name,
    ARRAY_AGG(gcx.country_id) AS country_ids
FROM games g
LEFT JOIN games_countries_xref gcx ON g.id = gcx.game_id
WHERE g.user_id = 1
GROUP BY g.id, g.name;

写法2:保留CTE结构的修改版

WITH game_country_ids AS (
    SELECT 
        g.id AS game_id, 
        g.user_id, 
        g.name, 
        ARRAY_AGG(gcx.country_id) AS country_ids
    FROM games AS g
    LEFT JOIN games_countries_xref AS gcx ON g.id = gcx.game_id
    GROUP BY g.id, g.user_id, g.name
)
SELECT name, country_ids
FROM game_country_ids
WHERE user_id = 1;

两种写法执行后都可以得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:39:01