[前][次][番号順一覧][スレッド一覧]

mysql:11047

From: 柴垣 <柴垣 <akiro@xxxxxxxxxx>>
Date: Sat, 26 Feb 2005 13:03:58 +0900
Subject: [mysql 11047] Re: 累積を計算するSQLは

柴垣です。長尾さん、佐々木さん、ありがとうございます。


>( 長尾さんwrote:) 全部 SQLでやる必要はないのではないでしょうか?


>(佐々木さんwrote:)こんな感じでどうかな
> select ID, Value +
> ifnull((select sum(b.Value) from table as b where b.id < a.id), 0) as Sum
> from table as a


 佐々木さんのSQL 文は、こちらのMySQL のバージョンが、3.23.55 のためか、
うまく動きませんでした。そこで、それを参考にしながら、以下のようなSQL 
文をつくり、うまく動作させることができました。

select a.id, sum(b.Value) as sum from tbl as a,tbl as b where
b.id<=a.id group by a.id;

 ただ、長尾さんに指摘されたことなのですが、受け取った結果の集計なら
単純に Value を足し合わせていくだけですが、上のSQL文では、行ごとに
集計範囲の条件を調べながら、その都度集計をしていくことになって、
全体の計算量は、行が増えるにつれて、行数の2乗のオーダーで増えて
いくことになってしまいます。
 これは避けたほうがいいやり方なのか、それともそれでも「サーバー側に
やらせている」という意味ではSQL 文として、妥当な手法なのでしょうか。
 もっといい方法がある、というのも含めて、意見がお聞きできればと
思います。(今回は、結果を操作する余地があまりない場面なので、
このままつかうことになりそうですが・・・。)


> > SQL文で、累積を計算していくものは書けないでしょうか。
> > 具体的には、下記のようなデータセットがあって、
> > 
> > ID   Value
> > -------------
> >  1       5
> >  2       3
> >  3       7
> >  4      12
> >  5       8
> > .....
> > 
> > これから、
> > 
> > ID     Sum
> > -------------
> >  1       5
> >  2       8
> >  3      15
> >  4      27
> >  5      35
> > ....
> > 
> > という具合に、





> > _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> > 
> >  柴垣 顕郎 akiro@xxxxxxxxxx
> > 
> > _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
> > 
> > 
> > 
> > 
> 
> 
> 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

 柴垣 顕郎 akiro@xxxxxxxxxx

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/



[前][次][番号順一覧][スレッド一覧]

     11044 2005-02-26 04:18 [柴垣 <akiro@xxxxxxxx] 累積を計算するSQLは                     
     11045 2005-02-26 10:47 ┣[tadashi nagao <tadas]                                       
     11046 2005-02-26 10:48 ┣[佐々木 祐 <yuu_sasak]                                       
->   11047 2005-02-26 13:03 ┃┗[柴垣 <akiro@xxxxxxxx]                                     
     11048 2005-02-26 13:34 ┃ ┣[tadashi nagao <tadas]                                   
     11049 2005-02-26 15:24 ┃ ┣[一山昌紀 <icchan@xxx]                                   
     11050 2005-02-26 17:43 ┃ ┃┗[柴垣 <akiro@xxxxxxxx]                                 
     11051 2005-02-27 18:09 ┃ ┃ ┗[遠藤 俊裕 <endo@xxxx]                               
     11059 2005-02-28 12:00 ┃ ┗["waya" <wayama@xxxxx]                                   
     11067 2005-02-28 13:56 ┗[班石悦夫 <madara@xxx]                                       
     11077 2005-02-28 14:28  ┣[柴垣 <akiro@xxxxxxxx]                                     
     11080 2005-02-28 14:45  ┗[一山 昌紀 <icchan@xx]                                     
     11089 2005-02-28 15:37   ┗[班石悦夫 <madara@xxx]                                   
     11093 2005-02-28 15:55    ┗[一山 昌紀 <icchan@xx]