Errore PostgreSQL: division by zero

ERROR:  division by zero

Una divisione (o un modulo) nella query ha incontrato un denominatore zero. A differenza di alcuni database e della maggior parte degli ambienti in virgola mobile, PostgreSQL solleva un errore invece di restituire NULL o infinito — quindi ogni divisione il cui denominatore può essere zero deve dire cosa dovrebbe succedere.

Cosa significa questo errore

L'errore interrompe l'intero statement (e la transazione), anche se una sola riga su milioni aveva lo zero. Ecco perché tipicamente compare in aggregazioni e report: tutto funziona fino al primo giorno in cui un gruppo è vuoto o un totale è zero. La soluzione è quasi sempre lo stesso idioma, applicato nel punto della divisione.

Cause comuni

Come diagnosticarlo

Trova le divisioni nella query e chiediti quale denominatore può essere zero. Per vedere le righe colpevoli, seleziona l'espressione del denominatore con le sue chiavi di raggruppamento e filtra per zero — le righe che tornano sono quelle che faranno esplodere la divisione.

Come risolverlo

-- L'idioma standard: denominatore zero → risultato NULL
SELECT clicks / NULLIF(impressions, 0) AS ctr FROM stats;

-- Se vuoi 0 (o altro default) invece di NULL:
SELECT COALESCE(clicks / NULLIF(impressions, 0), 0) AS ctr FROM stats;