postgresql 如何根据其他表的计算更新多行?

lf5gs5x2  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(120)

我有一个Bets表,用户可以打赌任何字。当一个最后期限到达时,我宣布结果。我想根据我宣布的结果更新用户余额。
Accounts
| 使用者ID|余额|
| - -|- -|
| 一个|15.00美元|
| 2个|2.0美元。|
Bets
| 投注ID|使用者ID|幸运字|金额|
| - -|- -|- -|- -|
| 一个|一个|汉堡包|10个|
| 2个|一个|图书|五个|
| 三个|2个|赢|2个|
Results
| 识别码|日期|幸运字|标价|
| - -|- -|- -|- -|
| 一个|2022年10月20日|图书|五十个|
我的PostgreSQL函数用于宣布结果和更新余额:

Create or replace function public.announce_result(luckyWord text, price numeric)
returns void as
$$
begin
   -- Insert to result table
   insert into results(date, luckyWord) values (now(), $1);

   -- Update each user balance base on calculation
   select userId, sum(amount) as amount from bets where luckyWord != $1 group by userId;
   select userId, sum(amount) as amount from bets where luckyWord == $1 group by userId;

   -- How can I update each user balance base on result above?
   -- I could in programming language, but don't know how in SQL.

end
$$ language plpgsql security definer;

在插入和计算之后,我希望帐户表为:
| 使用者ID|余额|
| - -|- -|
| 一个|250.00美元|
| 2个|0.0美元|

vmdwslir

vmdwslir1#

下面是从一个相关表更新另一个表的示例。

UPDATE accounts
SET accounts.balance = accounts.balance - bets.amount
FROM accounts, bets
WHERE accounts.userId = bets.userId AND bets.luckyWord=$1;

相关问题