Vorwort Heute entschied sich ein Kollege nach der Synchronisierung der Bestelldaten, die Funktionen LIMIT und SUM() zu verwenden, um den Gesamtbetrag der aktuellen Seite zu berechnen, um den Gesamtbetrag einer bestimmten Bestellung mit der anderen Partei zu vergleichen, da es einen Unterschied zwischen dem Gesamtbestellbetrag und dem Gesamtbetrag der Datenquelle gab. Er stellte jedoch fest, dass der berechnete Betrag nicht der Gesamtbetrag der seitenweise angezeigten Bestellungen, sondern der Gesamtbetrag aller Bestellungen war. Die Datenbankversion ist MySQL 5.7. Nachfolgend erläutern wir das aufgetretene Problem anhand eines Beispiels. Problemüberprüfung In dieser Rezension wird als Beispiel eine sehr einfache Bestelltabelle verwendet. Datenaufbereitung Die Anweisung zum Erstellen der Auftragstabelle lautet wie folgt (ich bin hier faul und verwende die Auto-Increment-ID. Es wird nicht empfohlen, die Auto-Increment-ID in der tatsächlichen Entwicklung als Auftrags-ID zu verwenden). CREATE TABLE `Reihenfolge` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Bestell-ID', `Betrag` Dezimalzahl (10,2) NICHT NULL KOMMENTAR 'Bestellbetrag', PRIMÄRSCHLÜSSEL (`id`) )ENGINE=InnoDB STANDARD-CHARSET=utf8mb4; Das SQL zum Einfügen eines Betrags von 100 lautet wie folgt (10-mal ausführen): INSERT INTO `Bestellung`(`Betrag`) WERTE (100); Der Gesamtbetrag beträgt also 10*100=1000. Problem SQL Verwenden Sie limit, um die Daten in Seiten abzufragen, und verwenden Sie die Funktion sum(), um den Gesamtbetrag der aktuellen Seite zu berechnen WÄHLEN SUM(`Betrag`) AUS `Bestellung` BESTELLEN NACH `id` GRENZE 5; Wie oben erwähnt, ist das erwartete Ergebnis 5*100=500, das tatsächliche Ergebnis ist jedoch 1000,00 (der Dezimalpunkt ist auf den Datentyp zurückzuführen). Fehlerbehebung Wenn Sie über ein gewisses Verständnis der Ausführungsreihenfolge von SELECT-Anweisungen verfügen, können Sie schnell feststellen, warum das zurückgegebene Ergebnis die Gesamtsumme aller Bestellungen ist. Als nächstes werde ich das Problem basierend auf der Ausführungsreihenfolge des problematischen SQL analysieren:
Ergänzender Inhalt Hier ist die Ausführungsreihenfolge der SELECT-Anweisung
Lösung Wenn Sie Paging-Daten zählen müssen (außer der Funktion SUM() haben auch die allgemeinen Funktionen COUNT(), AVG(), MAX() und MIN() dieses Problem), können Sie zur Handhabung eine Unterabfrage verwenden (PS: Die Speicherberechnung wird hier nicht berücksichtigt, der Zweck besteht darin, die Datenbank zur Lösung dieses Problems zu verwenden). Die Lösung des obigen Problems lautet wie folgt: WÄHLEN SUMME(o.Betrag) AUS (WÄHLEN `Betrag` AUS `Bestellung` BESTELLEN NACH `id` GRENZE 5) AS o; Der Rückgabewert der Operation beträgt 500,00. Zusammenfassen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: So berechnen Sie mit Linux den von zeitgesteuerten Dateien belegten Speicherplatz
>>: Eine einfache Möglichkeit, die Drag-Screenshot-Funktion von Vue zu implementieren
Tutorial zur MySQL-Installation. Zu Ihrer Informa...
Inhaltsverzeichnis 1. Beziehung zwischen übergeor...
In diesem Artikel finden Sie das Installations-Tu...
Inhaltsverzeichnis Vorwort Optimierung Variablen ...
Hauptunterschiede: 1. Typ SQL-Datenbanken werden ...
Im Allgemeinen sollte die Hintergrundfarbe einer W...
Inhaltsverzeichnis Implementierung der Statusfrei...
Projektszenario: Dark Horse Vue Projektmanagement...
1 Hintergrund JDK1.8-u181 und Tomcat8.5.53 wurden...
Wenn der Tabellenkopf fixiert ist, muss er in zwe...
Derjenige, der eine neue Verbindung herstellt, en...
Führen Sie den folgenden Befehl aus, um einen Feh...
1. Überprüfen Sie nach der Verbindung und Anmeldu...
Standardmäßig unterscheidet MySQL unter Linux zwi...
In diesem Artikelbeispiel wird der spezifische Co...