2017-01-22 4 views
0

私はmaria db、SQLのテーブルで単純な追加を実行する方法を見つけるのに問題があります。どうすればmaria db SQLのすべてのN行を集計できますか?

私はテーブルと呼ばれるトラフィックを持っている:

| 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 | 

どのように私は(COL1の上に、とcol2)すべてのN列を合計することができますか?

つまり、行をマージしてcol1とcol2の値を合計します。

結果はなり与えられたテーブルを想定し、そしてN = 2、 :

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

テーブルサイズがNのの倍数でない場合は、あなたができるすべてを取ります。

いずれかのアイデアはありますか?私はグループ化するIDを持っていない。

+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値はグループのサイズです。

+0

ありがとうございます!ちょっと、何らかの理由で、私がそれを実行しているときに、すべての行を1つにマージしています。どうか説明できますか? –

+0

@Amit_A。 。 。 SQL Fiddleをセットアップできますか?私は上記のコードで明らかなエラーは表示されません。これは、 '@ rn'が正しく初期化されなかった場合、' 'GROUP BY'を省略した場合、または' @ N'を表示しない場合に発生します(ちょうど2の場合はそれを置き換えてください)。 –

+0

お返事ありがとうございます。私はそれに応じてNを変更しましたが、結果は変わりません。ここにはsqlfidleがあります:http://sqlfiddle.com/#!9/a5855/2 –

関連する問題