在MySQL中處理除數爲零,該查詢可能零錯誤拋出師:如何有條件地與MySQL
SELECT ROUND(noOfBoys/noOfGirls) AS ration
FROM student;
如果noOfGirls
是0
則計算失敗。
處理這個問題的最佳方法是什麼?
我想有條件地將noOfGirls
的值更改爲1
,當它等於0
時。
有沒有更好的方法?
在MySQL中處理除數爲零,該查詢可能零錯誤拋出師:如何有條件地與MySQL
SELECT ROUND(noOfBoys/noOfGirls) AS ration
FROM student;
如果noOfGirls
是0
則計算失敗。
處理這個問題的最佳方法是什麼?
我想有條件地將noOfGirls
的值更改爲1
,當它等於0
時。
有沒有更好的方法?
是的,你可以做一個案例:
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;
你可以使用這個(過表達的)方式:
select IF(noOfGirls=0, NULL, round(noOfBoys/noOfGirls)) as ration from student;
哪如果沒有女孩,則會輸出NULL,這實際上是SQL語義中的0/0。
MySQL將反正給NULL
,如果你嘗試做0/0
,作爲SQL含義FO NULL
是「無數據」,或在這種情況下,「我不知道這是什麼價值可以」。
那麼,如果你想noOfGirls設置爲1,如果是0,那麼下面應該工作:
SELECT ROUND(noOfBoys/if(noOfGirls, noOfGirls, 1)) as ration FROM student;
select
case student.noOfGirls
when 0 then 1
else round(noOfBoys/noOfGirls)
end as ration
from
`student`
GREATEST(x, 1)
可以使用,因爲女孩的數量必須爲正:
SELECT ROUND(noOfBoys/GREATEST(noOfGirls, 1)) AS ration FROM student;
但它在SQL實現中並不是很便攜。
檢查分母是否爲零且分子不爲NULL - 如果是,則使用'NaN'。
MySQL不會拋出除零錯誤。 –
@UncleIroh它取決於MySQL配置。如果MySQL服務器啓用了'ERROR_FOR_DIVISION_BY_ZERO'模式,當發生零除時,它將發出錯誤。 – Metafaniel
@Metafaniel有趣我不知道。謝謝。 –