我知道 set @running_sum=0;
@running_sum:=@running_sum + ...
方法,但是,它似乎不起作用就我而言。
我的查询:
SELECT DISTINCT(date), COUNT(*) AS count
FROM table1
WHERE date > '2011-09-29' AND applicationid = '123'
GROUP BY date ORDER BY date
结果为我提供了唯一日期,以及应用程序 123 的出现次数。
我想保留 count
的总计,以查看累积增长。
现在我正在用 PHP 执行此操作,但我想将其全部切换到 MySQL。
使用本文第一行中的方法只是复制计数,而不是累加计数。
我错过了什么?
附言该集合非常小,只有大约 100 个条目。
编辑:你是对的 ypercube:
这是带有 running_sum 的版本:
SET @running_sum=0;
SELECT date, @running_sum:=@running_sum + COUNT(*) AS total FROM table1
WHERE date > '2011-09-29' AND applicationid = '123'
GROUP BY date ORDER BY date
count 列最终与我刚刚打印的 COUNT(*) 相同
最佳答案
更新的答案
OP 要求采用单一查询方法,这样就不必单独设置用户变量,而不必使用该变量来计算运行总计:
SELECT d.date,
@running_sum:=@running_sum + d.count AS running
FROM ( SELECT date, COUNT(*) AS `count`
FROM table1
WHERE date > '2011-09-29' AND applicationid = '123'
GROUP BY date
ORDER BY date ) d
JOIN (SELECT @running_sum := 0 AS dummy) dummy;
用户变量的“内联初始化”对于模拟其他分析函数也很有用。事实上,我从答案中学到了这项技术 like this one .
原始答案
您需要引入一个封闭的查询来将 @running_sum
列在您的 COUNT(*)ed 记录上:
SET @running_sum=0;
SELECT d.date,
@running_sum:=@running_sum + d.count AS running
FROM ( SELECT date, COUNT(*) AS `count`
FROM table1
WHERE date > '2011-09-29' AND applicationid = '123'
GROUP BY date
ORDER BY date ) d;
另见 this answer .
关于带有 COUNT 的 MySQL 运行总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359077/