基本的に、同様の平均化を行う 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 を与える行です。
周囲のクエリまたはソース データでより多くのコンテキストを提供する必要がある場合は、試してみることができます... お知らせください。