0

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

(我得到了总 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

4 回答 4

0

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

SELECT id, date, @t:=@t + total AS total
FROM table t1, (SELECT @t:=0) t2
ORDER BY t1.id
于 2012-12-05T21:28:07.293 回答
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;
于 2012-12-05T21:31:13.573 回答
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 |
+--------+-------+
于 2012-12-05T21:34:57.057 回答
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 格式。

于 2012-12-05T21:36:36.280 回答