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

MySQL按日期分组统计收入异常:为何未按日聚合返回总计?

问题分析与修正方案

你的查询出现两个关键问题,导致无法按日期分组统计每日收入:

1. GROUP BY 子句的语法错误

你在 FROM_UNIXTIME("created_at") 里用双引号包裹了列名 created_at,在SQL语法中双引号通常用来表示字符串常量,而非列名。这就导致 DATE(FROM_UNIXTIME("created_at")) 被解析成一个固定的字符串值,所有符合条件的行都会被归为同一组,自然只能得到一个总计结果。

2. SELECT 子句的逻辑错误

你直接在SELECT里返回了原始的 created_at 列,但这个列既没有用聚合函数处理(比如MAX/MIN),也没有出现在GROUP BY子句中(在MySQL严格模式下这会直接报错)。数据库会随机返回分组中某一行的时间戳,这显然不是你需要的每日日期。


修正后的查询语句

SELECT 
    DATE(FROM_UNIXTIME(`created_at`)) AS date,
    SUM(income) AS daily_income
FROM `incomes` 
WHERE `created_at` BETWEEN UNIX_TIMESTAMP(NOW() - INTERVAL 10 DAY) AND UNIX_TIMESTAMP(NOW())
GROUP BY DATE(FROM_UNIXTIME(`created_at`))
ORDER BY date;

关键修正点说明

  • 把列名 created_at 的双引号改成反引号(MySQL中如果列名无特殊字符,也可以直接去掉引号),确保数据库识别为列名而非字符串。
  • SELECT子句中返回分组后的日期(DATE(FROM_UNIXTIME(created_at)) AS date),替代原始时间戳,清晰展示每日对应的收入总和。
  • 添加 ORDER BY date 让结果按日期排序,更符合阅读习惯。

针对你的测试数据的预期结果

你的数据中,只有前3条记录在近10天范围内(最后一条时间戳1513267843对应2017-12-14,超出范围会被过滤):

  • 1516182896 和 1516188513 都对应日期 2018-01-17,收入总和为 300 + (-1050) = -750
  • 1516444061 对应日期 2018-01-20,收入总和为 2000

修正后的查询会返回:

date       daily_income
------------------------
2018-01-17 -750
2018-01-20 2000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:42:06