[pgsql-jp: 31687] Re: 更新処理時に比較
Takashi Higuchi
higuchi.takashi @ simplex-tech.co.jp
2003年 12月 3日 (水) 12:00:17 JST
こんにちは、ひぐちといいます。
mos_pgml さんは書きました:
>ゲーム結果の集計テーブルを作っております。
>(ゲームID, 最高得点, 得点合計, 人数)
>このテーブルを利用してゲーム毎に最高点と平均点を取ろうとしてます。
>
>ユーザからのゲーム結果の登録は、現在、複数回のクエリーを利用して実現できてい
>るのですが、これを一度のクエリーで処理できるものなのでしょうか?
>お知恵を拝借したく。
>
>現在の処理
> 1.テーブルロック
> 2.現在値をセレクト
> 3.(最高得点と比較:PHPで)
> 4.更新
> 5.コミット
>
>希望する処理
> 1.更新(登録する得点が最高点を超える場合は最高点カラムも更新)
直接試してはいないのですが、
CASE文を使用した以下のようなSQLはいかがでしょう?
UPDATE
テーブル名
SET
最高得点 = CASE WHEN 最高得点 < ユーザの得点 THEN 最高得点 ELSE ユーザの得点 END,
得点合計 = 得点合計 + ユーザの得点,
人数 = 人数 + 1
WHERE
ゲームID = ユーザのゲームID
#見当違いだったらごめんなさい...。
pgsql-jp メーリングリストの案内