与分组的总和计数[重复]

Posted

技术标签:

【中文标题】与分组的总和计数[重复]【英文标题】:count of sum with group by [duplicate] 【发布时间】:2013-01-31 09:55:37 【问题描述】:

可能重复:Calculate a running total in mysql

我需要获取为每个日期分组的计数总和。现在我正在运行以下查询并得到如下输出:

SELECT  `timestamp` , COUNT( * ) 
FROM  `A` 
WHERE  `timestamp` >=  '2013-01-04 07:12:12'
GROUP BY DATE_FORMAT( `timestamp` ,  '%Y-%m-%d' ) 

我得到了

输出:

timestamp                                               count(*)
-------------------------------------------------- -----------
2013-01-04 07:58:21                                4
2013-01-05 09:28:56                                38
2013-01-06 00:03:04                                10

现在我需要的是,我需要得到按日期分组的计数的总和。也就是说,第二个日期应该是 42,第三个日期应该是 52。如何在查询中执行此操作?

【问题讨论】:

【参考方案1】:

试一试:

SELECT  `timestamp` , @sum:= ifnull(@sum, 0 ) + COUNT( * ) 
FROM  `A` 
WHERE  `timestamp` >=  '2013-01-04 07:12:12'
GROUP BY DATE_FORMAT( `timestamp` ,  '%Y-%m-%d' ) 

【讨论】:

【参考方案2】:

试试:

SELECT 
   timestamp t , 
   (select count(*) from A where  timestamp <= t)
FROM  A
GROUP  BY timestamp
ORDER  BY timestamp

【讨论】:

【参考方案3】:

你能不能试试下面的SQL

SELECT DATE_FORMAT( ts_date ,  '%Y-%m-%d' ) as ts_dt_out, SUM(cnt) 
FROM
(
SELECT  `timestamp` ts_date , COUNT( * )  as cnt
FROM  `A` 
WHERE  `timestamp` >=  '2013-01-04 07:12:12'
GROUP BY DATE_FORMAT( `timestamp` ,  '%Y-%m-%d' ) 
)
as inner
WHERE ts_date >=  '2013-01-04 07:12:12'
GROUP BY ts_dt_out

注意:未经测试,如果不起作用,请告诉我

【讨论】:

这可能适用于这种情况,但是如果会有更多行怎么办,如果再过 10 天,您的解决方案就像 Alwin 提到的那样限制为 3 天,我希望他需要动态查询作为解决方案【参考方案4】:

这是一个简单的方法

SELECT  
    `timestamp` , 
    COUNT( * ) 
FROM  `A` 
WHERE  `timestamp` >=  '2013-01-04 07:12:12'
GROUP BY DATE(`timestamp`) 

【讨论】:

这只会给出计数。不是我要找的总和

以上是关于与分组的总和计数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

分组数据框并获得总和和计数?

使用条件和“分组依据”使用“分组依据”计算的计数记录总和

分组,计数并过滤掉与大于1的计数对应的条目[重复]

在同一分组中添加具有上述所有行总和的列

按总和条件分组[重复]

熊猫:设置列等于另一列的分组总和[重复]