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

如何创建含双表求和的视图?解决行不匹配引发的数值重复问题

解决多表关联求和重复的问题

问题根源

直接关联nota、concepto、abono三张表时,concepto的每条记录会与abono的每条记录生成笛卡尔积。比如某账户有1条concepto记录、3条abono记录,关联后会得到3条重复的concepto数据,最终sum(c.subtotal)会被重复计算3次,导致结果虚高。COALLECE仅能处理null值,无法解决笛卡尔积引发的求和重复问题。

修正后的视图创建语句

create view v_notas as
select 
    `n`.`id` AS `id`,
    `n`.`cliente` AS `cliente`,
    `n`.`fecha` AS `fecha`,
    `n`.`tel` AS `tel`,
    `n`.`dir` AS `dir`,
    `n`.`status` AS `status`,
    coalesce(`c`.`monto`, 0) AS `monto`,
    coalesce(`a`.`abonos`, 0) AS `abonos`
from `mvcdb`.`nota` `n`
left join (
    -- 先按nota_id分组计算总charges
    select `nota_id`, sum(`subtotal`) AS `monto`
    from `mvcdb`.`concepto`
    group by `nota_id`
) `c` on `n`.`id` = `c`.`nota_id`
left join (
    -- 先按nota_id分组计算总payments
    select `nota_id`, sum(`monto`) AS `abonos`
    from `mvcdb`.`abono`
    group by `nota_id`
) `a` on `n`.`id` = `a`.`nota_id`;

说明

  1. 先对concepto和abono分别按nota_id分组求和,得到每个账户的独立总金额,从根源避免关联时产生笛卡尔积。
  2. 用coalesce(..., 0)确保无对应记录的账户显示0而非null,保证视图数据的完整性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:15:35