3

いくつかの値を除いて、正しい結果を返すクエリがあります...理由はわかりません。Chinookデータベースを使用しています。

SELECT SUM(unitPrice)
FROM invoiceLine
WHERE invoiceId = 5

これは13,86を返します。

SELECT invoiceId, total
FROM invoice 
WHERE invoiceId = 5

これも13,86を返します。次のクエリについて考えてみましょう。

SELECT invoiceId, total
FROM invoice
WHERE total = (SELECT SUM(unitPrice)
            FROM invoiceLine
            WHERE invoiceId = 5)

これは戻ります...何もありません!invoiceId = 1に変更すると、その金額に一致するすべての結果が得られます。

なぜ??(最後のクエリはあまり意味がないことを私は知っています、それは単に問題を明確に示すためです。

4

2 に答える 2

2

請求書の合計が2dpに正しい場合は、次を使用することもできます

SELECT invoiceId, total
FROM invoice
WHERE total = (SELECT Round(SUM(unitPrice),2)
            FROM invoiceLine
            WHERE invoiceId = 5)

SQL Fiddleデモ(ラウンドありとなし)

于 2012-12-13T18:54:19.227 に答える
2

浮動小数点演算の世界へようこそ。ここでは、表示されるものが取得されるものではありません。

次のようなものを試してください:

SELECT invoiceId, total
FROM invoice i cross join
      (SELECT SUM(unitPrice) as total
            FROM invoiceLine
            WHERE invoiceId = 5
      ) i5
WHERE abs(i.total - i5.total) < 0.001
于 2012-12-13T18:28:04.683 に答える