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

MySQL按年月统计唯一ref对应的total_price求和问题求助

按年月汇总、同ref去重求和的SQL解决方案

问题分析

你的需求是每个ref的重复total_price仅计一次,再按年月维度汇总求和。原SQL中使用SUM(DISTINCT total_price)会错误地将同一分组内不同ref的相同total_price合并(比如2022-11的003和002的200会被当成同一个值只加一次),无法满足需求。

正确SQL写法

可以通过先按「年月+ref」维度去重,再按年月汇总的方式实现:

方法1:子查询分组去重

SELECT 
    CONCAT(YEAR(transDate), '-', LPAD(MONTH(transDate), 2, '0')) AS `Year/date`,
    SUM(unique_price) AS sum_of_total_price
FROM (
    -- 先按年月+ref分组,确保每个ref的total_price仅保留一条
    SELECT 
        YEAR(transDate) AS year,
        MONTH(transDate) AS month,
        ref,
        MAX(total_price) AS unique_price -- 同ref的total_price重复,取MAX/MIN/DISTINCT均可
    FROM your_table
    GROUP BY year, month, ref
) AS grouped_refs
GROUP BY year, month
ORDER BY `Year/date` ASC;

方法2:子查询DISTINCT去重

SELECT 
    CONCAT(YEAR(transDate), '-', LPAD(MONTH(transDate), 2, '0')) AS `Year/date`,
    SUM(total_price) AS sum_of_total_price
FROM (
    -- 直接去重年月+ref+total_price组合,确保每个ref在对应年月仅出现一次
    SELECT DISTINCT
        YEAR(transDate) AS year,
        MONTH(transDate) AS month,
        ref,
        total_price
    FROM your_table
) AS distinct_ref_prices
GROUP BY year, month
ORDER BY year, month ASC;

结果说明

两种写法都会输出符合要求的结果:

Year/datesum_of_total_price
2022-10150
2022-11400

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:25:36