我怎样才能对maria db SQL中的每N行求和?

时间:2017-01-22 15:10:37

标签: mysql sql mariadb

我无法找到在maria db,SQL表上执行简单添加的方法。

我有一张名为Traffic的表:

| start_time        | end_time          | col1 | col2 |
| 1485075600.000000 | 1485075900.000000 | 10   | 20 |
| 1485075900.000000 | 1485076200.000000 | 20   | 30 |
| 1485076200.000000 | 1485076500.000000 | 40   | 50 |
| 1485076500.000000 | 1485076800.000000 | 50   | 60 |

如何对每N列(在col1和col2上)进行求和?

我的意思是,合并行并对col1和col2的值求和。

假设给定的表,并且N = 2, 结果将是:

| start_time        | end_time          | col1 | col2|
| 1485075600.000000 | 1485076200.000000 | 30   | 50  |
| 1485076200.000000 | 1485076800.000000 | 90   | 110 |

如果表格大小不是N的倍数,请尽你所能。

任何人都有任何想法?我没有id分组。

1 个答案:

答案 0 :(得分:0)

您可以通过枚举行来完成此操作。为了正确,您需要一个列来指定排序 - SQL表表示无序集,因此它们需要一个用于排序的列。

我假设它是start_time。其余的只是聚合和算术:

select min(start_time) as start_time, max(end_time) as end_time,
       sum(col1) as col1, sum(col2) as col2
from (select t.*, (@rn := @rn + 1) as rn
      from traffic t cross join
           (select @rn := 0) params
      order by start_time
     ) t
group by floor( (rn - 1) / @N);

@N值是组的大小。