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
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
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
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 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.