2010-11-01 15 views
3

i besoin d'exécuter cette requête dans Postgres, mais je ne pouvais pas se débarrasser de cette erreurdivision PostgreSQL par zéro lors de la commande

ERROR: division by zero 
SQL state: 22012 

ici est la requête:

select id,rates_sum,rates_count from tbl_node order by rates_sum/rates_count DESC; 

je sais que je peux ajouter une petite valeur au rates_count mais j'obtiens des valeurs inexactes.

Existe-t-il un moyen de faire ignorer cette erreur par postgres ou d'utiliser if pour vérifier les zéros et les remplacer par un nombre quelconque. et à nouveau l'erreur dans la clause order by.

Merci

Répondre

8

Utilisez une instruction CASE:

SELECT 
    id, 
    rates_sum, 
    rates_count 
FROM 
    tbl_node 
ORDER BY 
    rates_sum/(CASE rates_count WHEN 0 THEN NULL ELSE rates_count END) DESC NULLS FIRST; 

Vous pouvez également utiliser NULLS LAST, si vous voulez.

+0

Thanks Man :), je n'oublierai jamais ce – ibmkhd

+0

vous pouvez également utiliser NULLIF au lieu de CASE pour le raccourcir (voir http://sqlbrain.wordpress.com/2009/10/06/avoid-sql-divide-by-zero-errors-by-using-nullif/) – Paul

0

Que diriez-vous d'un where rates_count != 0?

+0

Je dois retourner tous les nœuds, événement s'il a rates_count == 0 – ibmkhd

+0

Vous pouvez l'union avec une autre requête avec un 'where rates_count == 0' et un autre ordre. – SingleNegationElimination

+0

pouvez-vous s'il vous plaît donnez-moi un exemple :), j'ai essayé mais je reçois des erreurs – ibmkhd

Questions connexes