MySQL使用COUNT运行总计

djd*_*jdy 7 mysql

我知道这个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
Run Code Online (Sandbox Code Playgroud)

结果给出了唯一的日期,以及应用程序123的出现次数.

我想保持一个总计count,以看到累积的增长.

现在我在PHP中这样做,但我想将它全部切换到MySQL.

使用此帖子第一行中的方法只需复制计数,而不是累积计数.

我错过了什么?

PS该套装非常小,只有约100个条目.

编辑:你是对的ypercube:

这是run_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
Run Code Online (Sandbox Code Playgroud)

count列最终与我刚打印的COUNT(*)相同

pil*_*row 13

更新的答案

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;
Run Code Online (Sandbox Code Playgroud)

用户变量的"内联初始化"对于模拟其他分析函数也很有用.事实上,我从答案知道了这种技术像这样的.

原始答案

您需要引入一个封闭查询来列出@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;
Run Code Online (Sandbox Code Playgroud)

另见这个答案.