私のクエリの1つで、AVG
関数がintを返すようです。SQL AVGがintを返す
select ..., AVG(e.employee_level)avg_level
浮動小数点値を返すにはどうすればよいですか?私はキャストしようとしましたが、avg_level
のすべての行はまだ整数でした。
私のクエリの1つで、AVG
関数がintを返すようです。SQL AVGがintを返す
select ..., AVG(e.employee_level)avg_level
浮動小数点値を返すにはどうすればよいですか?私はキャストしようとしましたが、avg_level
のすべての行はまだ整数でした。
はこのようにそれを行うようにしてください:
AVG(Cast(e.employee_level as Float)) as avg_level
また、私はあなたには、いくつかの別のアプローチを見つけることができthisトピックを見つけましたが、私はそのと正確に作品かどうかを知らないを使用していません。
キャスティングはより確実ですが、...AVG(1.0 * e.employee_level)...
でも可能ですし、読みやすくすることができます。
これはRDBMSによって異なります。 AFAIK多くのRDBMSは、FLOATではなく、固定小数点数値として '1.0'を扱います。同様の効果、場合によってはこの場合はさらに良いが、全く同じではない。この理由から私はコード内で明示的なCAST/CONVERTを好む傾向があります。次に、データ型の序数と暗黙の変換に頼るのではなく、どのようなデータ型があるかを知ります。 – MatBailie
整数に対するAVG()関数の動作は、ANSI標準では定義されていません。一部のデータベースは整数を返します。他のデータベースは浮動小数点数を返します。浮動小数点数を取得するには、明示的なキャスト/変換を使用できます。あるいは、私がしているのは単純に1.0倍です。 –