web-dev-qa-db-fra.com

Déclarations IF-THEN-ELSE dans postgresql

Je cherche à écrire une requête postgresql pour effectuer les opérations suivantes:

if(field1 > 0,  field2 / field1 , 0)

J'ai essayé cette requête, mais ça ne marche pas

if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3

merci

44
user2311028

Comme indiqué dans la documentation de PostgreSQL ici :

L'expression SQL CASE est une expression conditionnelle générique, similaire aux instructions if/else dans d'autres langages de programmation.

Extrait de code répondant spécifiquement à votre question:

SELECT field1, field2,
  CASE
    WHEN field1>0 THEN field2/field1
    ELSE 0
  END 
  AS field3
FROM test
88
case when field1>0 then field2/field1 else 0 end as field3
14
Thanos Darkadakis

En général, une alternative à case when ... est coalesce(nullif(x,bad_value),y) (qui ne peut pas être utilisé dans le cas de OP). Par exemple,

select coalesce(nullif(y,''),x), coalesce(nullif(x,''),y), *
from (     (select 'abc' as x, '' as y)
 union all (select 'def' as x, 'ghi' as y)
 union all (select '' as x, 'jkl' as y)
 union all (select null as x, 'mno' as y)
 union all (select 'pqr' as x, null as y)
) q

donne:

 coalesce | coalesce |  x  |  y  
----------+----------+-----+-----
 abc      | abc      | abc | 
 ghi      | def      | def | ghi
 jkl      | jkl      |     | jkl
 mno      | mno      |     | mno
 pqr      | pqr      | pqr | 
(5 rows)
0