2016-07-13 5 views
2

Ich habe eine Notwendigkeit, das gesamte Geld aus der zugrunde liegenden DB zu summieren.MySQL SUM Funktion für die Summierung des gesamten Geldes

Ich habe 2 Möglichkeiten, das zu tun.

  1. die SQL-SUM() Funktion wird es zusammenzufassen oder
  2. die Liste aller Geld und Summe im Speicher holen.

ich denke, es wäre besser, die erste Option eine bessere Leistung unter Berücksichtigung verwenden, aber ich möchte wissen, ob SUM-Funktion sicher den Geldbetrag zusammenzufassen ohne dabei die Genauigkeit verwendet werden kann.

Wenn es die zweite Option wäre, hätte ich Javas BigDecimal verwendet, das verwendet wird, um Geld darzustellen.

+0

Ich bin nicht positiv, aber ich glaube, SUM Verhalten basiert auf Datentyp der Werte summiert. – Uueerdo

+0

Warum nicht sicher? Viele Banksysteme verwenden es und arbeiten immer noch ... – nosbor

+0

Wenn Sie die Auswahl vornehmen, wird die Tabelle für das Einfügen/Aktualisieren gesperrt. Das bedeutet "SICHER" – CSK

Antwort

2

Wenn Sie DECIMAL(m, 2) (unter der Annahme, 2 Dezimalstellen für Ihre Währung), MySQL SUM() wird exakt und schneller sein als alle Zeilen abgerufen, so dass sie in den Client schaufeln, dann mit einer ähnlichen Bibliothek die entsprechende Arithmetik zu tun.

AVG hat Präzisionsprobleme in jeder Situation.

+0

Danke für die Antwort – ak123

2

https://msdn.microsoft.com/en-us/library/ms187810.aspx

Gibt die Summierung aller Expressionswerte in der präzisesten Ausdruck Datentyp.

SUM verliert nicht mehr an Genauigkeit als Ihr lokaler Prozessor, Sie können es sicher verwenden.

Edit:

ich versehentlich einige T-SQL-Dokumentation geschrieben, hier sind die mySQL docs:

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html

Die SUM() und AVG() Funktionen Dezimalwert Rückkehr für exact-value-Argumente (integer oder DECIMAL) und ein DOUBLE-Wert für ungefähre Argumente (FLOAT oder DOUBLE).

So identisch zu T-SQL, wird es den genauesten Datentyp auswählen.

+0

Das ist eine völlig andere Datenbank. –

+0

Es wäre besser, wenn Sie anstelle von T-SQL eine Dokumentation von MySQL bereitstellen könnten. –

3

Es hängt von dem Datentyp ab, den Sie verwenden. Wenn Sie Floats verwenden, gibt es einige Genauigkeit verloren in mysql (siehe here und here), wenn Sie Dezimalzahlen verwenden, dann sollten Sie in Ordnung sein.