141 votes

Les instructions IF-THEN-ELSE en postgresql

Je cherche à écrire une requête PostgreSQL pour faire ce qui suit :

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

J'ai essayé cette requête, mais cela ne fonctionne pas

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

merci

240voto

Josvic Zammit Points 4982

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 champ1, champ2,
  CASE
    WHEN champ1>0 THEN champ2/champ1
    ELSE 0
  END 
  AS champ3
FROM test

35voto

Thanos Darkadakis Points 1102
cas lorsque champs1>0 alors champs2/champs1 sinon 0 fin en tant que champs3

5voto

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

sélectionnez coalesce(nullif(y,''),x), coalesce(nullif(x,''),y), *
de (     (sélectionnez 'abc' comme x, '' comme y)
 union all (sélectionnez 'def' comme x, 'ghi' comme y)
 union all (sélectionnez '' comme x, 'jkl' comme y)
 union all (sélectionnez null comme x, 'mno' comme y)
 union all (sélectionnez 'pqr' comme x, null comme y)
) q

donne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X