PostgreSQL在排序时出现除以零的情况

3
我需要在Postgres中执行这个查询,但是我无法摆脱这个错误。
    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语句检查零并将其替换为任何数字。 还有,在order by子句中出现了错误。 谢谢。
2个回答

9

使用CASE语句:

SELECT 
    id,
    rates_sum,
    rates_count 
FROM 
    tbl_node  
ORDER BY 
    rates_sum / NULLIF(rates_count,0) DESC NULLS FIRST;

如果您希望的话,您也可以使用 NULLS LAST


谢谢你,伙计 : ),我永远不会忘记这个。 - ibmkhd
1
你也可以使用NULLIF代替CASE来使代码更简洁(请参见http://sqlbrain.wordpress.com/2009/10/06/avoid-sql-divide-by-zero-errors-by-using-nullif/) - Paul

0

那么一个 where rates_count != 0 怎么样?


我需要返回所有节点,即使它的rates_count == 0。 - ibmkhd
你可以使用 where rates_count == 0 和另一种排序方式将其与另一个查询合并。 - SingleNegationElimination
你能给我一个例子吗?我尝试过了,但是出现了错误。 - ibmkhd
我无法在第一个选择语句中使用“order by”,而将其放在两个选择语句中会导致相同的问题。 - ibmkhd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接