• ベストアンサー

MySQLで行単位の和算はどうすれば良いですか?

データベース・MySQLの初心者です。 もう一つ教えてください。 下のテーブルで、NO、数値、和算カラムがあります。 NOカラムの1、2の行の数値カラムを足し、 NOカラム2の和算カラムに、結果の3を入れます。 同じように、2行づつ和算を行なうには、どのようにSQL文を つくれば良いでしょうか? テーブル NO 数値 和算 和算カラムの結果 1  1   null  null 2  2   null  3 3  5   null  7 4  2   null  7 5  2   null  4 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

こんな感じ //元データ create table tbl(no int,suuti int,wasan int null); insert into tbl(no,suuti) values(1,1),(2,2),(3,5),(4,2),(5,2); //更新 update tbl as t1 inner join tbl as t2 on t1.no=t2.no+1 set t1.wasan=t1.suuti+t2.suuti;

Yuu-mama3
質問者

お礼

お返事が遅くなり、ごめんなさいm(__)m こんな簡単に、動作するSQLが作れるなんて、ビックリです! ありがとうございます。(^-^ゞ 500行くらいのテストデータでは、一瞬で処理出来たんですが、 実際のデータでは、処理時間が長く完了しないです。 設定の問題でしょうか?何か別な方法を考えた方が良いのでしょうか? アドバイスの方、よろしくお願いいたします。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>実際のデータでは、処理時間が長く完了しないです。 どのくらいの量のデータを更新しようとしているのかによりますが 集計と違い更新するのですから、量が多ければそれなりに時間がかかりますよ むしろ更新せずに、必要なときだけ和算データを集計した方が効率的かも もしくはデータを投入する際にあらかじめ和算データを設定していくような 運用が必要かも。

Yuu-mama3
質問者

お礼

ご回答ありがとうございました! 更新って以外と時間がかかるんですね。 データベース内での更新が減る様な運用を検討したいと思います。 色々とありがとうございました。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

NOに空き番がないのであれば、 update テーブル a set 和算 = a.数値 + (select b.数値 from テーブル b where b.NO = (a.NO - 1)); 空き番があるなら、 update テーブル a set 和算 = a.数値 + (select b.数値 from テーブル b where b.NO < a.NO order by b.NO desc limit 1); といった感じでどうでしょうか。

Yuu-mama3
質問者

お礼

お返事、遅くなりましたm(__)m 私の力不足で、せっかくのSQLが上手く動作しません。ごめんなさい。 でも、NOカラムに空き番号があるなんて、想定していませんでした。 お返事ありがとうございます! 私が困っていた事は、解決したんですが、JOINを使った更新処理が異様に、長くなりました。 また、問題が増えてしまいました(;_;)