0

以下のような表があります。列escrow1から対応するuidのbalance1にすべての値を移動して追加したいと思います。そして、escrow2がbalance2に似ています。したがって、以下の場合。uid4の行の残高は1858000+42000、uid3の行の残高はbalance1= 1859265+30735およびescrow1=0、uid2の行の残高はbalance2= 940050+1050000およびescrow2=0になります。すべて他は同じです。1つのクエリでこれを行うことは可能ですか?私は一生懸命努力してきましたが、解決策を思い付くことができないので、関数でそれを実行し、すべての行をループする必要があるかもしれませんが、私はしたくないです。また、エスクロー値が0に等しくない行はごくわずかであることも知っています。それを踏まえて、クエリを最適化する方法はありますか?

 uid | balance1 | escrow1 | balance2 | escrow2 
-----+----------+---------+----------+---------
   1 |     5000 |       0 |        0 |       0
   9 |     5000 |       0 |        0 |       0
   6 |  1900000 |       0 |  1899960 |       0
   5 |  1900000 |       0 |  1900000 |       0
   7 |  1900000 |       0 |  1900000 |       0
   8 |  1900000 |       0 |  1900000 |       0
   4 |  1858000 |   42000 |  1900014 |       0
   2 |  1910000 |       0 |   940050 | 1050000
   3 |  1859265 |   30735 |  1895050 |       0
4

2 に答える 2

3

テーブルからデータを選択するだけの場合は、Gregが提供するクエリを使用します。テーブル自体を更新する場合は、以下のクエリが役立ちます。

Update TABLENAME
     Set Balance1 = Balance1 + Escrow1,
         Balance2 = Balance2 + Escrow2,
         Escrow1 = 0, Escrow2 = 0

お役に立てれば。

于 2013-02-28T04:48:52.523 に答える
0

私はそれが次のように単純だと思います:

SELECT uid
      ,Balance1 + Escrow1 AS Balance1
      ,Balance2 + Escrow2 AS Balance2
FROM   TableName

最適化に関しては、Postgreについてはあまり行っていませんが、最適化を行う必要があるとは思えません(テーブルに適切な主キーなどがあると仮定します)。

于 2013-02-28T04:44:35.097 に答える