【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

データベース・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


よろしくお願いします。

A 回答 (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;
    • good
    • 0
この回答へのお礼

お返事が遅くなり、ごめんなさいm(__)m

こんな簡単に、動作するSQLが作れるなんて、ビックリです!

ありがとうございます。(^-^ゞ

500行くらいのテストデータでは、一瞬で処理出来たんですが、
実際のデータでは、処理時間が長く完了しないです。


設定の問題でしょうか?何か別な方法を考えた方が良いのでしょうか?

アドバイスの方、よろしくお願いいたします。

お礼日時:2013/09/20 09:22

>実際のデータでは、処理時間が長く完了しないです。



どのくらいの量のデータを更新しようとしているのかによりますが
集計と違い更新するのですから、量が多ければそれなりに時間がかかりますよ

むしろ更新せずに、必要なときだけ和算データを集計した方が効率的かも
もしくはデータを投入する際にあらかじめ和算データを設定していくような
運用が必要かも。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

更新って以外と時間がかかるんですね。

データベース内での更新が減る様な運用を検討したいと思います。

色々とありがとうございました。

お礼日時:2013/09/24 13:41

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

といった感じでどうでしょうか。
    • good
    • 0
この回答へのお礼

お返事、遅くなりましたm(__)m

私の力不足で、せっかくのSQLが上手く動作しません。ごめんなさい。

でも、NOカラムに空き番号があるなんて、想定していませんでした。

お返事ありがとうございます!

私が困っていた事は、解決したんですが、JOINを使った更新処理が異様に、長くなりました。

また、問題が増えてしまいました(;_;)

お礼日時:2013/09/20 09:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報