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

Snowflake SQL:左连接前汇总支付金额且保留表A明细

解决方案

要解决表A行重复的问题,核心是先对表B按ID汇总支付总额,再与表A左连接,这样既保留表A的所有明细,又不会因为表B的重复ID导致行重复。

方法1:子查询写法

直接在JOIN语句中嵌套子查询完成表B的汇总:

SELECT
    A.ID,
    A.Part_Description,
    A.Part_Cost,
    B_SUMMARY.Total_Payment
FROM
    TableA AS A
LEFT JOIN (
    -- 按ID汇总表B的支付总额
    SELECT
        ID,
        SUM(Total_Payment) AS Total_Payment  -- 注意:如果表B的支付字段不是Total_Payment,请替换为实际字段名
    FROM
        TableB
    GROUP BY
        ID
) AS B_SUMMARY ON A.ID = B_SUMMARY.ID;

方法2:CTE写法(更易读)

用公共表表达式(CTE)拆分逻辑,新手更容易理解:

WITH B_SUMMARY AS (
    SELECT
        ID,
        SUM(Total_Payment) AS Total_Payment
    FROM
        TableB
    GROUP BY
        ID
)
SELECT
    A.ID,
    A.Part_Description,
    A.Part_Cost,
    B_SUMMARY.Total_Payment
FROM
    TableA AS A
LEFT JOIN B_SUMMARY ON A.ID = B_SUMMARY.ID;

关键逻辑说明

  1. 表B的预处理:通过GROUP BY ID将同一ID的多条支付记录合并,用SUM()计算该ID的总支付金额,确保每个ID仅返回一行汇总数据。
  2. 左连接表A:汇总后的表B每个ID对应一行,与表A连接时,表A的每一行只会匹配一次,彻底避免了原写法中表A行重复的问题。
  3. 空值处理:如果表B中没有某ID的记录,左连接后Total_Payment会显示为NULL,符合左连接保留表A所有行的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:12:38