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

如何在MySQL中按客户分组汇总金额、计算占比并合并多行求和?

解决MySQL按客户分组计算总金额及占比的问题

首先先明确你的数据表结构和数据:

dateclienttotal
2015-01-01john85.00
2015-01-01alfred35.00
2015-01-01georgy125.00
2015-01-01linda42.00
2015-01-01alex76.00
2015-01-01john94.00
2015-01-01john75.30

你已经写了部分查询语句,但关联的子查询没完成,下面是完整的可运行SQL,能实现按客户分组计算总金额,以及该客户总金额占当天所有客户总金额的比例:

SELECT 
    c.client,
    c.total AS client_total,
    ROUND(c.total * 100 / t.total_all, 1) AS percent
FROM (
    -- 子查询1:计算每个客户当天的总金额
    SELECT 
        client,
        SUM(total) AS total
    FROM mytable
    WHERE date = '2015-01-01'
    GROUP BY client
) c
-- 关联子查询2:计算当天所有客户的总金额(作为占比的分母)
JOIN (
    SELECT SUM(total) AS total_all
    FROM mytable
    WHERE date = '2015-01-01'
) t;

代码解释:

  • 第一个子查询c:通过GROUP BY client对每个客户分组,用SUM(total)计算每个客户在2015-01-01的消费总金额。
  • 第二个子查询t:计算当天所有客户的消费总金额,作为占比计算的分母。
  • 最后通过JOIN关联两个子查询,用ROUND(c.total * 100 / t.total_all, 1)计算占比并保留1位小数。

查询结果示例:

运行上述SQL后,你会得到类似这样的结果:

clientclient_totalpercent
john254.3041.1
alfred35.005.7
georgy125.0020.2
linda42.006.8
alex76.0012.3

(注:所有占比加起来会接近100%,因为四舍五入可能有微小误差)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:52:30