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

MySQL基于多列去重并按客户组汇总金额的查询实现方法

嘿,我看你需要处理MySQL查询里的重复数据,再按客户组汇总金额对吧?结合你给出的关联查询片段,我帮你调整出合适的语句:

解决方案

首先得先对Data_result表中Code、Amount、Status字段重复的记录做去重处理,再和关联表连接,最后按client_group分组计算金额总和。这里有两种实用的实现方式:

方式一:子查询+DISTINCT快速去重

这种方式适合只需要保留Code、Amount、Status组合唯一记录的场景,写法简洁:

SELECT 
    `client`.`client_group`,
    FORMAT(SUM(`unique_data`.`Data_result_amount`), 2) AS sum
FROM (
    -- 先筛选出Code、Amount、Status组合唯一的记录,同时保留后续关联需要的字段
    SELECT DISTINCT 
        `Data_result_lead`,
        `Data_result_amount`,
        `Data_result_status_id`,
        `Code`, 
        `Status`
    FROM `qwer`.`Data_result`
) AS unique_data
INNER JOIN `qwer`.`Data` 
    ON (`unique_data`.`Data_result_lead` = `Data`.`Data_id`)
INNER JOIN `qwer`.`Data_status` 
    ON (`unique_data`.`Data_result_status_id` = `Data_status`.`status_id`) -- 请根据你的实际表结构补全关联字段
INNER JOIN `qwer`.`client` 
    ON (`Data`.`client_id` = `client`.`client_id`) -- 假设Data表和client表通过client_id关联,按需调整
GROUP BY `client`.`client_group`;

方式二:窗口函数精准控制去重逻辑

如果Data_result表有自增ID、时间戳这类可以排序的字段,用窗口函数能更精准地选择保留哪一条重复记录(比如最新的那条):

SELECT 
    `client`.`client_group`,
    FORMAT(SUM(`filtered_data`.`Data_result_amount`), 2) AS sum
FROM (
    SELECT 
        `Data_result_lead`,
        `Data_result_amount`,
        `Data_result_status_id`,
        `Code`, 
        `Status`,
        -- 按Code、Amount、Status分组,给每组记录编号,这里按Data_result_id倒序取最新的一条
        ROW_NUMBER() OVER (PARTITION BY `Code`, `Amount`, `Status` ORDER BY `Data_result_id` DESC) AS rn
    FROM `qwer`.`Data_result`
) AS filtered_data
INNER JOIN `qwer`.`Data` 
    ON (`filtered_data`.`Data_result_lead` = `Data`.`Data_id`)
INNER JOIN `qwer`.`Data_status` 
    ON (`filtered_data`.`Data_result_status_id` = `Data_status`.`status_id`)
INNER JOIN `qwer`.`client` 
    ON (`Data`.`client_id` = `client`.`client_id`)
WHERE filtered_data.rn = 1 -- 只保留每组的第一条记录
GROUP BY `client`.`client_group`;

几点关键提醒:

  • 确保PARTITION BY(窗口函数)或DISTINCT包含的字段和你要去重的列完全一致(也就是Code、Amount、Status)。
  • 所有关联表的连接条件要根据你的实际表结构补全,比如Data_status的关联字段、client表的关联逻辑。
  • 保留原查询里的FORMAT()函数,确保金额总和格式化为两位小数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:56:08