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

MySQL关联项目与付款表 保留明细行同时统计各项目总收款额

问题原因

你现有的查询使用了sum()聚合函数但没有指定GROUP BY分组规则,数据库会默认将关联后属于同一项目的所有行聚合为单行汇总结果,因此只会返回每个项目的一行数据,无法满足每条付款记录都携带项目总收款的需求。

解决方案

方案1:窗口函数实现(推荐,适配MySQL 8.0+、PostgreSQL、SQL Server等主流新版数据库)

使用分区聚合的窗口函数,不会合并原始行,会为每一行返回对应项目的总收款金额:

SELECT 
    pp.project_id,
    pp.id AS payment_id,
    pp.payment_amount,
    SUM(pp.payment_amount) OVER (PARTITION BY pp.project_id) AS total_received
FROM project_payments pp
-- 如果需要带出项目名称等字段,可以加上JOIN关联projects表
-- JOIN projects p ON p.id = pp.project_id
ORDER BY pp.project_id, pp.id

其中PARTITION BY pp.project_id表示按项目ID分组计算付款总额,每一行结果都会返回对应分组的聚合值,不会合并原始付款记录。

方案2:子查询关联实现(兼容不支持窗口函数的旧版数据库,比如MySQL 5.x)

先通过子查询统计每个项目的总收款,再和原始付款表关联映射到每一行:

SELECT 
    pp.project_id,
    pp.id AS payment_id,
    pp.payment_amount,
    pt.total_received
FROM project_payments pp
JOIN (
    SELECT project_id, SUM(payment_amount) AS total_received
    FROM project_payments
    GROUP BY project_id
) pt ON pp.project_id = pt.project_id
-- 如果需要带出项目名称等字段,可以加上JOIN关联projects表
-- JOIN projects p ON p.id = pp.project_id
ORDER BY pp.project_id, pp.id

两种方案执行后都可以得到你需要的查询结果。


内容的提问来源于stack exchange,提问作者Muntashir Are Rahi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:45:04