0

私は過去 20 年間、多くのデータベースを扱ってきましたが、SQL Server でこの「興味深い」タイプの暗黙的なデータ変換の問題に遭遇しただけです。

1 つの小さな int 列を持つテーブルを作成し、値 1 と 2 を持つ 2 つの行を挿入してから、次のクエリ「Select Avg(Column) From table」を実行すると、1.5 ではなく切り捨てられた結果が得られます。列のデータ型に切り捨てたり丸めたりするのではなく、結果全体を格納するためにデータ型を自動的にアップサイズする地球上のほとんどすべての dB から。これで、考えられるすべてのシナリオでこれを回避できることがわかりましたが、特にデータ分析製品を使用したデータ分析では、適切な動的ソリューションではありません... IE: Cognos/Microstrategy など...

私はデータ ウェアハウジングを使用しており、数百万行のファクト テーブルを持っています...小さな列を保存して、適切な集計結果を得たいと思っています。このニュアンスを回避するための私の現在のアプローチは、最小の定量化可能な列を Numeric(19,5) として定義して、すべての状況を説明することです。これらの列は多くの場合、tinyint が優れているが自然に集約されない 1 または 0 のみを格納しますが、良い。

他のすべての DB (oracle/db2/informix/access など) が行うことを SQL サーバーに指示するディレクティブはありませんか? より大きなタイプにプロモートし、結果全体を表示して、それらでやりたいことをさせてくれるのはどれですか?

4

3 に答える 3

1

私の知る限り、最速の方法は暗黙のキャストを行うことです: SELECT AVG(Field * 1.0). もちろん、同じ方法で明示的なキャストを行うこともできます。私の知る限り、整数を平均化するときに整数を浮動小数点数に変換する必要があることを SQL Server に伝える方法はなく、おそらくそれは実際には正しい動作です。

于 2013-09-02T18:05:41.223 に答える