mysql - 通过 SUM() 递增 MySql 变量不正确
问题描述
我正在尝试组合一个查询,该查询按日期对记录进行分组以及该特定日期的总数(一天中可以有多个条目),但我还需要一个我打算使用 MySQL 变量的运行总数。我的问题是累积总计列似乎仅包含该日期的 SUM() 。
所以这适用于每日总数
SELECT
YEAR(log_at) as year,
MONTH(log_at) as month,
DAY(log_at) as day,
SUM(ev) as dailyTotal,
count(*) as count
FROM tracks
WHERE user_id = 1
GROUP BY year, month, day
ORDER BY year, month, day ASC
添加我认为将是一个相当简单的变量来跟踪运行总数
SET @cumulative := 0;
SELECT
YEAR(log_at) as year,
MONTH(log_at) as month,
DAY(log_at) as day,
SUM(ev) as dailyTotal,
@cumulative := @cumulative + sum(ev) AS cumulative,
count(*) as count
FROM tracks
WHERE user_id = 1
GROUP BY year, month, day
ORDER BY year, month, day ASC
而累积变量只包含当天的总数。但是,如果我将其更改为递增 1 而不是 SUM() 它似乎可以正常工作
非常感谢任何有关实现所需行为的建议!
解决方案
您必须首先创建整个选择,然后才能执行累积操作,因为您不能同时附加 GROUP BY 列的总和(我真的不知道为什么要面团)
SELECT
`year`,
`month`,
`day`,
`dailyTotal`,
@cum := @cum + `dailyTotal` as `cumulative`,
`count`
FROM
(
SELECT
YEAR(log_at) as year,
MONTH(log_at) as month,
DAY(log_at) as day,
SUM(ev) as dailyTotal,
count(*) as count
FROM tracks
WHERE user_id = 1
GROUP BY year, month, day
ORDER BY year, month, day ASC
) a
JOIN (SELECT @cum := 0) b
我用稍微不那么密集的表格对其进行了测试……也许我在这里弄错了。但我希望你能得到这个理论。
推荐阅读
- ios - 我想在单个表格视图中使用来自 nib 的两个不同的自定义单元格。两个原型电池具有不同的高度
- python-3.x - 预提交的设置环境
- python - 使用 importlib.import_module 时出现 ModuleNotFoundError
- excel - VBA - 如何从单个单元格复制数据并粘贴到合并的单元格中
- google-apps-script - 以编程方式创建 Google Sheet 并获取它的 JSON URL
- r - 如何在使用“对”函数创建的图上绘制线性回归线
- c - 为什么我们使用return;无效函数中的语句?
- mysql - 如何解决触发时的迁移错误?
- dart - dart:强制执行强类型比较
- vba - 每个 If Then 循环的 VBA 表 - 文本重复