if 条件中的 Postgres 语法错误

Postgres syntax error in if condition

我正在尝试计算佣金并根据该佣金值 (commiss) 我想更新列值 fixed_fee

 select  st1.* ,(st1.order_item_value * st1.commission_rate)/100 commiss , 
 if commiss < 50 then 
   update payment_error set fixed_fee = -5 where commiss <= 50
 else if commiss >= 50 then
     update payment_error set fixed_fee = -10 where commiss >=50
 else
   end if
 from payment_error as st1 join payment_error as st2 on st1.order_item_id=st2.order_item_id ; 

while 运行 is then error come is :

 ERROR:  syntax error at or near "<"
 LINE 2: if commiss<50 then 
              ^

   ********** Error **********

   ERROR: syntax error at or near "<"
   SQL state: 42601
    Character: 87

不能同时使用更新和 select。要更新你可以试试这个:

update payment_error 
set fixed_fee = case when (order_item_value * commission_rate * .01) < 50 then -5
else 5  --In your case you have use both as -5 so change it as per your reqm 

您不能在 SQL 中使用 if。这仅适用于 PL/pgSQL 等过程语言。

但更重要的是,您不能像这样在 select 语句中嵌入 update 语句。

您尝试做的事情可以通过使用 CASE:

的单个 UPDATE 语句来完成
update payment_error 
   set fixed_fee = case 
                     when (order_item_value * commission_rate)/100 <= 50 then -5
                     else 5 --<<< different value here
                   end;

在这两种情况下,您都将 fixed_fee 设置为 -5 - 我假设这是一个打字错误,您的意思是在佣金大于 50[=16] 的情况下分配不同的费用=]