2010-11-01 22 views
3

,当我需要在执行这个Postgres的查询,但我无法摆脱这种错误PostgreSQL的被零除订货

ERROR: division by zero 
SQL state: 22012 

这里是查询:

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

我知道我可以为rates_count添加一个小值,但我得到不准确的值。

有没有一种方法,使Postgres的忽略这个错误,或者使用if语句来检查零和与任意数量的替换它们。 并再次按顺序排除错误。

谢谢

回答

8

使用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; 

你也可以使用NULLS LAST,如果你想。

+0

感谢的人:),我永远不会忘记这个 – ibmkhd 2010-11-01 10:57:37

+0

你也可以使用NULLIF而不是CASE来缩短它(见http://sqlbrain.wordpress.com/2009/10/06/avoid-sql-divide-by-zero-errors-by-using-nullif/ ) – Paul 2014-11-17 15:50:35

0

怎么样where rates_count != 0

+0

我需要返回的所有节点,事件,如果有rates_count == 0 – ibmkhd 2010-11-01 09:30:58

+0

您可以联合其与一个'那里rates_count == 0'和其他订货另一个查询。 – SingleNegationElimination 2010-11-01 09:45:14

+0

可以请你给我一个例子:),我试过,但我得到的错误 – ibmkhd 2010-11-01 09:57:27