Error de PostgreSQL: division by zero

ERROR:  division by zero

Alguna división (o módulo) en la consulta llegó a un denominador cero. A diferencia de algunas bases de datos y de la mayoría de entornos de coma flotante, PostgreSQL lanza un error en vez de devolver NULL o infinito — así que cualquier división cuyo denominador pueda ser cero necesita decir qué debería pasar.

Qué significa este error

El error aborta toda la sentencia (y la transacción), aunque solo una fila de millones tuviera el cero. Por eso típicamente aparece en agregaciones e informes: todo funciona hasta el primer día en que un grupo está vacío o un total es cero. La solución es casi siempre el mismo idiom, aplicado en el punto de la división.

Causas comunes

Cómo diagnosticarlo

Encuentra las divisiones en la consulta y pregunta qué denominador puede ser cero. Para ver las filas infractoras, selecciona la expresión del denominador con sus claves de agrupación y filtra por cero — las filas que vuelven son las que harán explotar la división.

Cómo solucionarlo

-- El idiom estándar: denominador cero → resultado NULL
SELECT clicks / NULLIF(impressions, 0) AS ctr FROM stats;

-- Si quieres 0 (u otro valor por defecto) en vez de NULL:
SELECT COALESCE(clicks / NULLIF(impressions, 0), 0) AS ctr FROM stats;