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

SQL Join查询SUM()结果异常求助:关联后求和值被放大6倍

问题原因

你在Query 2中使用隐式连接时,没有指定payments_cable与areas表的关联条件,仅过滤了areas.user = "faruk",这会导致两张表产生笛卡尔积:payments_cable的每条记录都会和areas中符合user="faruk"的所有记录匹配,最终SUM(amount)会把每条金额重复计算多次(你这里是6次),所以结果被放大。

解决方案

需要通过显式JOIN语句指定两张表的关联条件(假设关联字段为area,如果实际关联字段不同,替换成对应字段即可),确保只统计faruk对应的区域的支付记录,同时保持正确的分组逻辑:

SELECT 
    areas.user,
    payments_cable.area,
    payments_cable.r_month,
    payments_cable.year,
    SUM(payments_cable.amount) AS total,
    payments_cable.paid
FROM payments_cable
INNER JOIN areas 
    ON payments_cable.area = areas.area -- 关键关联条件,需与实际业务字段匹配
WHERE areas.user = "faruk"
GROUP BY 
    payments_cable.r_month,
    payments_cable.year,
    payments_cable.paid,
    areas.user,
    payments_cable.area -- 分组需包含所有非聚合字段(符合SQL标准模式要求)
ORDER BY STR_TO_DATE(CONCAT(payments_cable.year, payments_cable.r_month), '%Y %M') DESC;

如果不需要返回areas.user字段,也可以先从areas中获取faruk对应的area列表,再用这个列表过滤payments_cable表,写法更简洁:

SELECT 
    area,
    r_month,
    year,
    SUM(amount) AS total,
    paid
FROM payments_cable
WHERE area IN (SELECT area FROM areas WHERE user = "faruk")
GROUP BY r_month, year, paid, area
ORDER BY STR_TO_DATE(CONCAT(year, r_month), '%Y %M') DESC;

这两种写法都能避免笛卡尔积,得到正确的金额合计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:41:58