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

MySQL中如何将总金额最高的单笔交易金额插入目标表?

解决MySQL中筛选单笔金额总求和最高值并插入的问题

你当前的SQL错误在于按DONOR_ID直接分组求和,得到的是该用户所有交易的总金额(1950),而不是按单笔交易金额分组后计算的各金额总求和。

修正步骤

  1. 修正目标表主键错误
    原donationrequests表定义中PRIMARY KEY (USER)是错误的,表中不存在USER字段,应改为以DONOR_ID为主键:
ALTER TABLE donationrequests DROP PRIMARY KEY;
ALTER TABLE donationrequests ADD PRIMARY KEY (DONOR_ID);
  1. 执行正确的插入逻辑

方法1(MySQL 8.0+ 支持窗口函数)

通过窗口函数RANK()对每个用户的各单笔金额总求和进行排名,筛选出排名第一的金额插入:

INSERT INTO donationrequests (DONOR_ID, ASK)
SELECT DONOR_ID, TRANSACTION_AMT
FROM (
    SELECT 
        DONOR_ID,
        TRANSACTION_AMT,
        SUM(TRANSACTION_AMT) AS total_per_amt,
        RANK() OVER (PARTITION BY DONOR_ID ORDER BY SUM(TRANSACTION_AMT) DESC) AS rnk
    FROM transactions
    GROUP BY DONOR_ID, TRANSACTION_AMT
) AS ranked
WHERE rnk = 1;
  • 内层子查询:按用户和单笔交易金额分组,计算该金额的总求和(即该金额×出现次数),同时为每个用户的各金额按总求和降序排名
  • 外层查询:筛选出排名为1的记录,即总求和最高的单笔交易金额,插入目标表

方法2(兼容MySQL 8.0以下版本)

使用嵌套子查询筛选出每个用户的最大单笔金额总求和,再匹配对应的交易金额:

INSERT INTO donationrequests (DONOR_ID, ASK)
SELECT t1.DONOR_ID, t1.TRANSACTION_AMT
FROM transactions t1
GROUP BY t1.DONOR_ID, t1.TRANSACTION_AMT
HAVING SUM(t1.TRANSACTION_AMT) = (
    SELECT MAX(total_amt)
    FROM (
        SELECT SUM(t2.TRANSACTION_AMT) AS total_amt
        FROM transactions t2
        WHERE t2.DONOR_ID = t1.DONOR_ID
        GROUP BY t2.TRANSACTION_AMT
    ) AS sub
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:55:31