2012-05-07 8 views
2

複数の行を合計してその合計をセルに挿入するSQLクエリをphpmyadminで実行しようとしています。SQLで列を集計する

ファイルは日付別にソートされています。

私はちょうどそれの構文を見つけるのに苦労しています。

基本的に私は1つの列が呼ばれている「ポイント」とそれはこのように見える必要があり、別のいわゆる「Total_Points」

+--------+--------------+ 
| Points | Total Points | 
+--------+--------------+ 
| 10 |  10  | 
| 10 |  20  | 
| 10 |  30  | 
| 10 |  40  | 
+--------+--------------+ 

などなどなど。
そこにこれを行うだろうそこに何かをしなければならないと、私はちょうどそれをあなたがこのように「ウィンドウ関数」を使用することができ、実行中の合計

+0

「合計点数」を合計してもらいたいですか? –

+0

データベースを指定する必要があります。 OracleやTeradataなどの一部のデータベースは、実行中の合計を簡単にサポートします。他のデータベースでは、それはより複雑です。 –

+0

テーブルを更新したいので、['[mysql] running total'](http://stackoverflow.com/search?q= [mysql] + running + total) 。 –

答えて

0

をしないのですように思える:

create table tbl(ord int, points int); 
insert into tbl values(1, 10),(2, 10), (3, 10), (4, 10); 

select 
    *, 
    sum(points) over w total_points 
from tbl 
window w as (order by ord); 

ord | points | total_points 
-----+--------+-------------- 
    1 |  10 |   10 
    2 |  10 |   20 
    3 |  10 |   30 
    4 |  10 |   40 

I「の集約"あなたのORDER BY基準は列ordです。もちろん、それを置き換えることができます。

その他:具体的なデータベースベンダーを指定していません。私の例はPostgreSQL上で動作します。他のSQL方言は少し異なるかもしれません。

+0

MySQL(これはChrisが使用しているものに変わりました)は、この標準機能をサポートしていない少数のDBMSの1つです。 –

0

SQLの累積合計について多くの議論があります。

this articleをご覧ください。スピードは大きな問題ではない場合は、単に使用することができます。

select t1.id, t1.SomeNumt, SUM(t2.SomeNumt) as sum 
from @t t1 
inner join @t t2 
    on t1.id >= t2.id 
    group by t1.id, t1.SomeNumt 
    order by t1.id 

重要な問題は、SQLが実際にどのような順序で行を格納しないことです。 「実行中の合計」のiedaは、行に順序があることを前提としており、デフォルトではこれは真ではありません。 SQL Server 2012にはこのための機能がありますが、人々がそれを使用するまで、これが可能です。

+0

Oracle、PostgreSQL、DB2、およびTeradataには、合計時間を長時間実行する機能がありました(A.H. answerを参照)。 SQL Serverは最終的にその領域に追いついています。 –

+0

申し訳ありませんが、私はそれを言及するのを忘れました。それはMySqlです。そして、私は累計を探しています。だから私はそれらを合計することができます前に、私はそれらを正しい順序(日付)で並べ替え、それらを合計する必要があります。それは役に立ちます。近づくと思う –