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

SQL中json_agg与json_build_object使用问题:赌场存款分组异常

解决方法

你的问题大概率是LEFT JOIN引入了无匹配的空记录,导致json_agg错误聚合了空值,或是关联逻辑未正确绑定赌场与对应存款。可以通过以下两种方式修复:

方式一:过滤空存款记录

在json_agg中添加filter子句,排除未匹配到存款的空记录,确保每个赌场的deposits只包含自身的有效存款对象:

SELECT casino.id
      , casino."name"
      , json_agg(json_build_object('name', d."name", 'logo', d.logo)) 
        FILTER (WHERE d.id IS NOT NULL) as deposits
FROM public."Casino" casino
LEFT JOIN "DepositsOnCasinos" doc 
  ON doc."casinoId" = casino.id 
LEFT JOIN "Deposit" d 
  ON d.id = doc."depositId" 
GROUP BY casino.id, casino."name";

如果赌场没有存款,deposits会返回空数组[],而非包含空值的无效数组。

方式二:子查询先聚合存款

若主查询的LEFT JOIN导致关联逻辑混乱,可改用子查询先完成存款与赌场的绑定聚合,再关联主表:

SELECT casino.id
      , casino."name"
      , COALESCE(d.deposits, '[]'::json) as deposits
FROM public."Casino" casino
LEFT JOIN (
  SELECT doc."casinoId",
         json_agg(json_build_object('name', d."name", 'logo', d.logo)) as deposits
  FROM "DepositsOnCasinos" doc
  JOIN "Deposit" d ON d.id = doc."depositId"
  GROUP BY doc."casinoId"
) d ON d."casinoId" = casino.id;

这种方式先在子查询中完成存款的分组聚合,再关联赌场表,避免了主查询中空记录的干扰,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Cult of Tranquility

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:15:44