仕事の絡みで以前にもやっていた集計をしていて嵌ったのでメモ。いや、普通に考えればそうしたら良いのだけど、混乱したので覚書。
以前の成功例
以前やっていたのは以下の状態。
- MySQL 5.0.45
- 対象の型は「decimal」のhogeというカラム
- decimal 型の小数点以下は切り捨て
- 対象の型には「正」の数値のみ
- 合計した値を10で割った数値を出力
上記条件を満たしたクエリは以下。
select sum(cast(hoge as unsigned)/10) from test;
前回はコレで問題なかったのですが、今回同様にしてみたところ。どうしても結果に浮動小数点が表示される……。
今回の失敗例
- MySQL 5.0.45
- 対象の型は「int」のhogeというカラム
- 対象の型には「負」の数値のみ
- 合計した値を10で割った数値を出力
で、結果クエリがこうなりました。
select truncate(sum((hoge*-1)/10),0) from test;
「/10」がどうも悪さをしているようで、「/10」が無ければ浮動小数点が表示されないけども、10で割りたい。割ったら浮動小数点が表示される。悩んだ挙句、trancate の存在を忘れていたことを思い出したので解決。
うーん、整数で割ってて浮動小数点が表示されるのは何故なんだろう?
