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

MySQL按行逐行累计统计每日新增用户总数问题

解决MySQL每日用户数统计及累计总数计算问题

我来帮你搞定这个累计统计的问题!你遇到的累计结果从200开始、未正确累加的情况,主要是因为没有先按日期分组统计每日用户数,或者未对日期排序导致累计顺序混乱,也可能是变量初始化环节出了问题。

正确的查询语句

这里提供两种可靠的写法,你可以根据自己的MySQL版本选择:

写法1:先初始化变量再查询

SET @running_total = 0;
SELECT 
    day_created,
    daily_count,
    (@running_total := @running_total + daily_count) AS cumulative_total
FROM (
    -- 先按日期分组,统计每日新增用户数
    SELECT 
        DATE(created_at) AS day_created,
        COUNT(*) AS daily_count
    FROM myTable
    GROUP BY DATE(created_at)
    -- 必须按日期升序排序,保证累计顺序正确
    ORDER BY day_created ASC
) AS daily_stats;

写法2:用CROSS JOIN初始化变量(无需单独执行SET语句)

SELECT 
    day_created,
    daily_count,
    (@running_total := @running_total + daily_count) AS cumulative_total
FROM (
    SELECT 
        DATE(created_at) AS day_created,
        COUNT(*) AS daily_count
    FROM myTable
    GROUP BY DATE(created_at)
    ORDER BY day_created ASC
) AS daily_stats
-- 初始化累计变量为0
CROSS JOIN (SELECT @running_total := 0) AS init;

关键注意点

  • 先分组再累计:必须先通过子查询得到每日的用户总数,不能直接在原表上累加——原表的每一行是单个用户,直接累加会把每个用户都算一次,而不是每日的总数。
  • 按日期排序:子查询里一定要加ORDER BY day_created ASC,否则累计会按随机顺序计算,结果完全错误。
  • 变量初始化:确保@running_total初始值为0,如果之前执行过其他使用这个变量的语句,残留值会导致累计从非0开始(比如你遇到的200)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:11