我的sql怎么做sum(),每个原始,直到那个原始?

时间:2012-12-05 21:17:47

标签: mysql

我写了一个查询,返回2 col如下:

(我得到count(*)

的总数
date     total  
1,2010     2  
2,2010     5  
3,2010     3  
4,2010     7  
5,2010     6  
6,2010     6  

我想对我得到的结果进行一些查询,这些结果将对总数进行求和,但是在每一行中它将总和到那一行,所以我会得到:

date     total  
1,2010     2  
2,2010     7  
3,2010     13  
4,2010     20  
5,2010     26  
6,2010     32 

我该怎么做?

4 个答案:

答案 0 :(得分:0)

您可以使用用户变量来计算总和。

SELECT id, date, @t:=@t + total AS total
FROM table t1, (SELECT @t:=0) t2
ORDER BY t1.id

答案 1 :(得分:0)

您可以使用子查询和用户变量来执行此操作:

set @running_total := 0;
select date, @running_total := @running_total + total
from
(
  select date,count(*) as total
  from your_table
  group by date
  order by date
) s
order by date;

答案 2 :(得分:0)

有趣的问题,我设法通过JOIN完成任务:

mysql> select t2.date, sum(t1.total) from tt t1 join tt t2 on t1.date <= t2.date group by t2.date;
+--------+---------------+
| date   | sum(t1.total) |
+--------+---------------+
| 1,2010 |             2 |
| 2,2010 |             7 |
| 3,2010 |            10 |
| 4,2010 |            17 |
| 5,2010 |            23 |
| 6,2010 |            29 |
+--------+---------------+

和原始表:

mysql> select * from tt;
+--------+-------+
| date   | total |
+--------+-------+
| 1,2010 |     2 |
| 2,2010 |     5 |
| 3,2010 |     3 |
| 4,2010 |     7 |
| 5,2010 |     6 |
| 6,2010 |     6 |
+--------+-------+

答案 3 :(得分:0)

这称为累积和。标准的SQL方法是使用相关的子查询:

select t.date,
       (select sum(total) from t t2 where t2.date <= t.date) as CumulativeTotal
from t

这假设日期字段可以直接比较,“2,2010”对我来说没有意义作为约会。如果这是“月,年”,那么它不是一个日期,你需要做额外的工作。我强烈建议当字符串代表日期时,你应该使用YYYY-MM或YYYY-MM-DD格式。