1

基本的に、同様の平均化を行う 2 つのクエリでは、異なる結果が得られます。予想される「実際の」値は 81.25 であるため、通常の丸めでは、DECIMAL(10,1) にキャストすると 81.3 になると考えられますが、クエリの 1 つ (最初のクエリ) では 81.2 が返されます。

以下に例を示します。

CAST( AVG( t1.NumCorrect / 7.0 * 100.0 ) AS decimal(10,1))

対。

CAST( AVG( t2.PercentCorrect ) AS decimal(10,1))

私が知る限り、唯一の違いは、PercentCorrect が REAL 型であり、NumCorrect が FLOAT 型であることです。しかし、これらはどちらも浮動小数点型なので、キャストの動作が異なるのはなぜでしょうか?

最初の行では、NumCorrect は「7 つのうち正解数」のようなものなので、オンザフライで「パーセント」を計算し、それを AVG します。一方、2 番目の例では、パーセントは事前に計算されており、AVG が必要なだけです。繰り返しますが、最初の行は 81.3 ではなく 81.2 を与える行です。

周囲のクエリまたはソース データでより多くのコンテキストを提供する必要がある場合は、試してみることができます... お知らせください。

4

2 に答える 2

3

これを SQL で実行すると、答えが得られます。

select 1425554.3/5457.251


select convert(real, (1425554.3/5457.251))

基本的に、t2.PercentCorrect は既に小数点値を切り捨てる実数にキャスト/変換されています。t1.NumCorrect はオンザフライで除算され、すべての小数点は avg 関数で処理されます。

お役に立てれば!

于 2013-02-05T23:10:46.643 に答える
1

最も簡単な方法は 1.0 で割ることで、6 桁の精度が得られます。

例:

select avg(incomeamount/1.0),vendorid from dailyincome group by vendorid 
于 2016-10-15T02:43:45.757 に答える