MySQL:订购时如何避免被零除?

时间:2013-12-18 12:34:50

标签: mysql sql divide-by-zero

我需要做以下事情:

SELECT * FROM Video WHERE visible = 1 ORDER BY votesUp/votesDown DESC

但我知道votesDown可以承受0(零)作为其值。我该如何解决以避免除零?

OBS :在我的情况下,当{0}时可以将votesDown变为1。

2 个答案:

答案 0 :(得分:6)

使用IF()功能,您可以将0转换为1。 你能试试吗?

SELECT *
FROM Video
WHERE visible = 1 
ORDER BY votesUp / IF(votesDown = 0, 1, votesDown) DESC

答案 1 :(得分:3)

这样做:

SELECT * FROM Video WHERE visible = 1
ORDER BY votesUp / CASE votesDown WHEN 0 THEN 1 ELSE votesDown END DESC;

但是,您通常会按所有投票的百分比来订购。当根本没有投票时,结果是未定义的,所以使用NULL然后:

SELECT * FROM Video WHERE visible = 1
ORDER BY votesUp / NULLIF(votesUp + votesDown, 0) DESC;