- ベストアンサー
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 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じ //元データ 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;
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
>実際のデータでは、処理時間が長く完了しないです。 どのくらいの量のデータを更新しようとしているのかによりますが 集計と違い更新するのですから、量が多ければそれなりに時間がかかりますよ むしろ更新せずに、必要なときだけ和算データを集計した方が効率的かも もしくはデータを投入する際にあらかじめ和算データを設定していくような 運用が必要かも。
お礼
ご回答ありがとうございました! 更新って以外と時間がかかるんですね。 データベース内での更新が減る様な運用を検討したいと思います。 色々とありがとうございました。
- yamada_g
- ベストアンサー率68% (258/374)
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); といった感じでどうでしょうか。
お礼
お返事、遅くなりましたm(__)m 私の力不足で、せっかくのSQLが上手く動作しません。ごめんなさい。 でも、NOカラムに空き番号があるなんて、想定していませんでした。 お返事ありがとうございます! 私が困っていた事は、解決したんですが、JOINを使った更新処理が異様に、長くなりました。 また、問題が増えてしまいました(;_;)
お礼
お返事が遅くなり、ごめんなさいm(__)m こんな簡単に、動作するSQLが作れるなんて、ビックリです! ありがとうございます。(^-^ゞ 500行くらいのテストデータでは、一瞬で処理出来たんですが、 実際のデータでは、処理時間が長く完了しないです。 設定の問題でしょうか?何か別な方法を考えた方が良いのでしょうか? アドバイスの方、よろしくお願いいたします。