Mysql - 逐行累计计算总数
Mysql - Accumulatively count the total on a row by row basis
我正在尝试在 MySql 中计算每天创建的用户数,然后逐行得出一个累计数字。我在这里遵循了其他建议,但我似乎无法使积累正确。
问题是它一直从基数 200 开始计数,而不考虑前面的行。
我希望它去哪里 return
我的Sql如下;
SELECT day(created_at), count(*), (@something := @something+count(*)) as value
FROM myTable
CROSS JOIN (SELECT @something := 200) r
GROUP BY day(created_at);
要创建 table 并填充它,您可以使用;
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 上查看此内容。
使用子查询:
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
还需要一个子查询。
我正在尝试在 MySql 中计算每天创建的用户数,然后逐行得出一个累计数字。我在这里遵循了其他建议,但我似乎无法使积累正确。
问题是它一直从基数 200 开始计数,而不考虑前面的行。
我希望它去哪里 return
我的Sql如下;
SELECT day(created_at), count(*), (@something := @something+count(*)) as value
FROM myTable
CROSS JOIN (SELECT @something := 200) r
GROUP BY day(created_at);
要创建 table 并填充它,您可以使用;
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 上查看此内容。
使用子查询:
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
还需要一个子查询。