アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば、テーブルがtable1で、データが下記の場合。
id money sum
1 12
2 20
3 22

上記のデータを下記の様に更新を掛けたい
id money sum
1 12 12
2 20 32
3 22 54

この時のmysqlでのsqlを教えて下さい。

質問者からの補足コメント

  • うーん・・・

    さっき投稿して気が付きましたが、この場合は既にテーブルにデータが
    保存されていますのでsumの値を更新してテーブルに保存をしたいので
    すが。

    updateを使っての更新クエリーと言うのはどうなるんでしょうか。
    またまた、宜しくお願いします。

      補足日時:2016/02/07 14:48
  • うれしい

    updateも、selectも上手く行きました。

    有難う御座いました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/02/08 08:53

A 回答 (2件)

一番単純にやる場合2行のSQLにわけること


set @a=0;
select id,money,@a:=@a+money as sum from hoge order by id;

これを1行でやる場合、サブクエリを使ってこう
select id,money,(select @a:=@a+money from (select @a:=0) as dummy) as sum from hoge order by id;

SQLはレコードに順位がないので、このような累計データを取る場合は
かならず順位づけをするorder byを指定します。

またidがかならずユニークである前提であればこのようにもかけます
select id,money,(select sum(money) from hoge as h2 where h2.id<=h1.id) as sum from hoge as h1;
    • good
    • 0
この回答へのお礼

有難う御座います。

なるほど。毎回に頭が下がります。
未だ未だ私には分からない事ばかりで、お手数をおかけしています。

やって見ます。

お礼日時:2016/02/07 14:45

>既にテーブルにデータが


>保存されていますのでsumの値を更新してテーブルに保存をしたい

テーブルを毎回全レコード対象に更新するのはあまりお勧めしませんが
以下でできないことはない。
ただしホントに必要な処理なのかはよく考えて運用ください

//テストデータ
create table hoge(id int not null primary key,money int,sum int null);
insert into hoge(id,money) values(1,12),(2,20),(3,22);

update hoge set sum=(select @a:=@a+money from (select @a:=0) as dummy) order by id;
この回答への補足あり
    • good
    • 0
この回答へのお礼

有難う御座います。

矢張り、複雑なクエリーになる。
頭が付いて来ないが参考になりました。

やって見ます。

お礼日時:2016/02/07 18:59

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