2011-11-23 23 views
15

在MySQL中處理除數爲零,該查詢可能零錯誤拋出師:如何有條件地與MySQL

SELECT ROUND(noOfBoys/noOfGirls) AS ration 
FROM student; 

如果noOfGirls0則計算失敗。

處理這個問題的最佳方法是什麼?

我想有條件地將noOfGirls的值更改爲1,當它等於0時。

有沒有更好的方法?

+5

MySQL不會拋出除零錯誤。 –

+2

@UncleIroh它取決於MySQL配置。如果MySQL服務器啓用了'ERROR_FOR_DIVISION_BY_ZERO'模式,當發生零除時,它將發出錯誤。 – Metafaniel

+0

@Metafaniel有趣我不知道。謝謝。 –

回答

11

是的,你可以做一個案例:

select case when noOfGirls=0 then noOfBoys 
     else round(noOfBoys/noOfGirls) end as ration 
from student; 

但你可能想:

select case when noOfGirls=0 then 1 
     else round(noOfBoys/noOfGirls) end as ration 
from student; 
7

你可以使用這個(過表達的)方式:

select IF(noOfGirls=0, NULL, round(noOfBoys/noOfGirls)) as ration from student; 

哪如果沒有女孩,則會輸出NULL,這實際上是SQL語義中的0/0。

MySQL將反正給NULL,如果你嘗試做0/0,作爲SQL含義FO NULL是「無數據」,或在這種情況下,「我不知道這是什麼價值可以」。

2

那麼,如果你想noOfGirls設置爲1,如果是0,那麼下面應該工作:

SELECT ROUND(noOfBoys/if(noOfGirls, noOfGirls, 1)) as ration FROM student; 
0
select 
    case student.noOfGirls 
      when 0 then 1 
      else round(noOfBoys/noOfGirls) 
    end as ration 
from 
    `student` 
3

GREATEST(x, 1)可以使用,因爲女孩的數量必須爲正:

SELECT ROUND(noOfBoys/GREATEST(noOfGirls, 1)) AS ration FROM student; 

但它在SQL實現中並不是很便攜。

0

檢查分母是否爲零且分子不爲NULL - 如果是,則使用'NaN'。