一尘不染

MySQL的运行总数为COUNT

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

结果为我提供了唯一的日期,以及应用程序123的出现次数。

我想保持的总运行量count,以查看累积的增长。

现在,我正在用PHP进行此操作,但我想将其全部切换到MySQL。

使用本文第一行中的方法只是复制计数,而不是累加计数。

我想念什么?

PS该集合很小,只有大约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(*)相同


阅读 255

收藏
2020-05-17

共1个答案

一尘不染

更新的答案

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;

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

原始答案

您需要引入一个封闭查询,以@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;

另请参阅此答案

2020-05-17