Saltar al contenido

Evita la división por cero en PostgreSQL

Esta sección ha sido analizado por expertos para asegurar la exactitud de nuestra esta reseña.

Solución:

Puede usar la función NULLIF, por ejemplo

something/NULLIF(column_name,0)

Si el valor de column_name es 0 – el resultado de toda la expresión será NULL

Ya que count() nunca regresa NULL (a diferencia de otras funciones agregadas), solo tiene que capturar el 0 caso (que es el único caso problemático de todos modos):

CASE count(column_name)
   WHEN 0 THEN 1
   ELSE count(column_name)
END

Citando el manual sobre funciones agregadas:

Cabe señalar que a excepción de countestas funciones devuelven un
null valor cuando no hay filas seleccionadas.

Me doy cuenta de que esta es una vieja pregunta, pero otra solución sería hacer uso de la mayor función:

greatest( count(column_name), 1 )  -- NULL and 0 are valid argument values

Nota:

Mi preferencia sería devolver un NULL, como en la respuesta de Erwin y Yuriy, o resolver esto lógicamente detectando que el valor es 0 antes de la operación de división, y volviendo 0. De lo contrario, los datos pueden tergiversarse utilizando 1.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *