我知道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(*) 相同
更新答案
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;
用户变量的“内联初始化”对于模拟其他分析函数也很有用。事实上,我从答案中学到了这项技术像这个 https://stackoverflow.com/a/3333697/132382.
原答案
您需要引入一个封闭的查询来对@running_sum
超过您的 COUNT(*) 条记录:
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;
也可以看看这个答案 https://stackoverflow.com/a/1290936/132382.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)