Mysql - 逐行累计计算总数

时间:2018-04-26 15:52:30

标签: mysql sql accumulate

我尝试在MySql中计算每天创建的用户数量,然后逐行获得累积数字。我在这里已经遵循了其他建议,但我似乎无法让积累变得正确。

问题在于它从基数200开始计算而不考虑之前的行。

Output

我希望它返回哪里

enter image description here

我的Sql如下;

SELECT day(created_at), count(*), (@something := @something+count(*)) as value
FROM myTable
CROSS JOIN (SELECT @something := 200) r
GROUP BY day(created_at);

要创建表并填充它,您可以使用;

CREATE TABLE myTable (
  id INT AUTO_INCREMENT,
  created_at DATETIME,
  PRIMARY KEY (id)
);

INSERT INTO myTable (created_at) 
            VALUES ('2018-04-01'),
             ('2018-04-01'),
             ('2018-04-01'),
             ('2018-04-01'),
             ('2018-04-02'),
             ('2018-04-02'),
             ('2018-04-02'),
             ('2018-04-03'),
             ('2018-04-03');

您可以在SqlFiddle上查看此内容。

1 个答案:

答案 0 :(得分:1)

使用子查询:

SELECT day, cnt, (@s := @s + cnt)
FROM (SELECT day(created_at) as day, count(*) as cnt
     FROM myTable
     GROUP BY day(created_at)
    ) d CROSS JOIN
    (SELECT @s := 0) r;

GROUP BY和变量长时间没有合作。在更新的版本中,ORDER BY也需要子查询。