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
In diesem Artikel wird der spezifische JavaScript...
Datenbankversion: mysql> select version(); +--...
In diesem Artikel erfahren Sie, wie Sie das Probl...
In diesem Artikelbeispiel wird der spezifische Co...
Wenn Sie eine E-Mail in einem Shell-Skript erstel...
Vorwort: Die MySQL-Master-Slave-Architektur dürft...
Inhaltsverzeichnis Vorne geschrieben Lösung 1: Gl...
Vorwort Ich habe kürzlich etwas über MySQL-Indize...
Bild-Tag : <img> Um ein Bild in eine Seite e...
Unterschiede und Verwendungen von Datumstypen MyS...
Sie wissen, dass der Browser ohne diese Option bei...
In diesem Artikelbeispiel wird der spezifische Co...
Zum Einfügen von Videos in HTML werden am häufigst...
In diesem Artikelbeispiel wird der spezifische Co...
MySQL unterscheidet zwischen Groß- und Kleinschre...