Heim >Datenbank >MySQL-Tutorial >Warum gibt die PostgreSQL-Ganzzahldivision falsche Ergebnisse zurück?

Warum gibt die PostgreSQL-Ganzzahldivision falsche Ergebnisse zurück?

Linda Hamilton
Linda HamiltonOriginal
2024-12-27 22:58:12335Durchsuche

Why Does PostgreSQL Integer Division Return Incorrect Results?

Divisionsproblem in PostgreSQL: Warum Division (/) falsche Ergebnisse zurückgibt

Beim Versuch, Divisionen mit ganzzahligen Spalten in PostgreSQL zu berechnen, kann es vorkommen, dass Benutzer auf unerwartete Ergebnisse stoßen. Stellen Sie sich das folgende Szenario vor:

Problem:

Eine Tabelle mit dem Namen „software“ enthält die Spalten „dev_cost“ und „sell_cost“. Sie möchten die Menge an Software ermitteln, die verkauft werden muss, um die dev_cost zu decken. Vorausgesetzt, dass „dev_cost“ 16.000 und „sell_cost“ 7.500 beträgt, erwarten Sie ein Ergebnis von 3. Die Abfrage

select dev_cost / sell_cost from software;

gibt jedoch stattdessen 2 zurück.

Ursache:

PostgresSQL führt eine Ganzzahldivision durch, die das Ergebnis in Richtung kürzt null. Da sowohl „dev_cost“ als auch „sell_cost“ als Ganzzahlen definiert sind, wird das Ergebnis auf 2 gekürzt.

Lösung:

Um das richtige Ergebnis zu erhalten, mindestens eine Der Operand muss in einen Gleitkommatyp umgewandelt werden, z. B. Float oder Decimal. Dies kann mit der Funktion cast() oder dem Operator mit Doppelpunkt :: erreicht werden:

select cast(dev_cost as decimal) / sell_cost from software;

oder

select dev_cost::decimal / sell_cost from software;

Alternativ können Sie das Ergebnis mit auf die nächste ganze Zahl aufrunden die Funktion ceil():

select ceil(dev_cost::decimal / sell_cost) from software;

Demo:

[SQLFiddle Demo](https://www.sqlfiddle.com/#!17/23da8/1)

Das obige ist der detaillierte Inhalt vonWarum gibt die PostgreSQL-Ganzzahldivision falsche Ergebnisse zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn