こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

WHERE文の中で除算

SQLのWHERE文の中で計算をしているのですが、「除数が0です」とのエラーがでてしまいます。
同じ計算をSELECT文の中にいれると、エラーにならず、計算結果がでるのですが、どうしてでしょうか?

SELECT DATA, (A + B - C) / (A + B) * 100
FROM table
↑この時は計算結果がでます。

SELECT DATA
FROM table
WHERE (A + B - C) / (A + B) * 100 <= 50.0
↑「除数が0です」といわれてしまいます。

投稿日時 - 2006-01-13 17:41:34

QNo.1893691

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

>>同じ計算をSELECT文の中にいれると、
>>エラーにならず、計算結果がでるのですが、どうしてでしょうか?
DBによってはエラーになります
Oracleではエラーにならないのかな?
今Oracle環境が無いものでわかりません
SELECT DATA, (A + B - C) / (A + B) * 100 FROM table
の結果はoracleどうなっているのですか?
A+B=0である場合に無限をあらわす値がどう表されているか知りたいです
他のDBでもエラーが出ないようにする方法としては
(A + B - C) / (A + B) * 100を
case when A+B=0 then null else (A + B - C) / (A + B) * 100 end
と表すほうが安全です

SELECT DATA FROM table WHERE (A + B - C) / (A + B) * 100 <= 50.0
ですが上記のようにcaseを使用しても良いですが
(A + B - C) / (A + B) * 100 <= 50.0 を
(A + B - C) * 100 <= (A + B) * 50.0 と
しても良いのではないでしょうか?
ただしA+B=0場合に前者は不明、後者はC>=0でtrue,C<0でfalseになる違いがあることに注意してください

投稿日時 - 2006-01-14 16:48:30

補足

SELECT DATA, (A + B - C) / (A + B) * 100 FROM tableだと
割り切れず、13.37281153.....というような結果が返ってきます。
このあたりが原因のような気もするのですが、TRUNC関数で
少数以下の桁数をあわせてもだめでした。
(A + B - C) * 100 <= (A + B) * 50.0とするとうまくいくのですが、
A,B,Cのいずれかが0になる場合もあるので、そのあたりを検証してみたいと思います。

投稿日時 - 2006-01-16 13:26:49

ANo.1

100 <= 50.0の部分を先に論理演算して、”偽”だから数値的にはゼロにしているのではないでしょうか。

エラーになるのかもしれませんか、
SELECT 100 <= 50.0 FROM table
の結果はどうなるでしょうか。

WHERE ( (A+B-C)/(A+B)*100 ) <= 50.0
だと、どういう結果になるでしょうか。

投稿日時 - 2006-01-14 03:34:24

補足

SELECT 100 <= 50.0 FROM table だとエラーになりました。
( (A+B-C)/(A+B)*100 ) <= 50.0でも試してみたのですがm
やはり「除数が0です」と言われてしまいます...。

投稿日時 - 2006-01-16 13:07:23

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-