2つの浮動小数点数列に、同じ値を別々の順序で挿入された以下のテーブルを考察します。
CREATE TABLE t1 (i INTEGER, a FLOAT, b FLOAT); INSERT t1 (1, 1000.55, 2000.7); INSERT t1 (1, 2000.4, 2000.1); INSERT t1 (1, 2000.1, 2000.4); INSERT t1 (1, 2000.7, 1000.55);
以下のSELECT文の条件式は、2つの列の値の合計を比較しています。
SELECT i, SUM(a) as sum_a, SUM(b) as sum_b FROM t1 GROUP BY i HAVING sum_a <> sum_b;
2つのSUM計算で使われる値は同じなので、行は戻されないのは明らかです。ただし、結果は次のようになります。
i sum_a sum_b ----------- ---------------------- ---------------------- 1 7.00175000000000E 003 7.00175000000000E 003
この計算には、目に見えないエラーが紛れ込んでいます。以下の文で、そのエラーを示します。
SELECT ABS(SUM(a) - SUM(b)) FROM t1;
結果は以下のようになります。
Abs((Sum(a)-Sum(b))) ---------------------- 1.81898940354586E-012