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
Ich habe viele davon gesammelt, aber alle endeten...
Einleitung: Der Interface-Designer Joshua Porter h...
1. Einführung in LVM Bei der Verwaltung von Linux...
Durch Klicken Bilder zu wechseln, ist im Leben ei...
Wie funktioniert „Adaptives Webdesign“? Eigentlich...
Die Bildintegrationstechnologie, die von YAHOO in...
Schnelle Lösung zum Vergessen des MySQL-Datenbank...
1.1 Einführung in die iptables-Firewall Netfilter...
In diesem Artikel wird der spezifische Code von V...
Vor kurzem ist im Projekt ein Problem aufgetreten...
Vorwort Ab MySQL-Version 3.23.44 unterstützen Inn...
Vorwort Aufgrund der Projektanforderungen werden ...
Dieser Artikel stellt den Implementierungscode fü...
Inhaltsverzeichnis 1. Konzept Speicherverwaltungs...
Vorwort 1. Entprellen: Nach dem Auslösen eines Ho...