Beim Verwenden der MySql-Fensterfunktion zum Sammeln statistischer Daten habe ich ein kleines Problem festgestellt und möchte es mit Ihnen besprechen. Umgebungskonfiguration:
Problem: Wenn bei der Ausführung der Summenfunktion die Fensterfunktion doppelte Daten enthält, werden dieselben Daten direkt und nicht schrittweise hinzugefügt. Problembeschreibung Daten: In einer Notentabelle gibt es drei Felder: Studenten-ID, Kurs-ID, Notenscore. Die Abfragebedingungen fragen die Bewertungsrangliste und die Bewertungszusammenfassung der Studenten für jeden Kurs ab. Abfrageergebnis: Es wurde festgestellt, dass bei gleichen Punktzahlen für dieselbe Lehrveranstaltung die Gesamtpunktzahl nicht kumuliert, sondern auf einmal addiert wird. Erstellen einer Datentabelle CREATE TABLE `Punktzahl`( `s_id` VARCHAR(20), `c_id` VARCHAR(20), `s_score` INT(3), PRIMÄRSCHLÜSSEL(`s_id`,`c_id`) ) Einfügen von Daten -- in Score-Werte einfügen('01', '01', 80); in Score-Werte einfügen('01', '02', 90); in Score-Werte einfügen('01', '03', 99); in Score-Werte einfügen('02', '01', 70); in Score-Werte einfügen('02', '02', 60); in Score-Werte einfügen('02', '03', 80); in Score-Werte einfügen('03', '01', 80); in Score-Werte einfügen('03', '02', 80); einfügen in Score-Werte('03', '03', 80); in Score-Werte einfügen('04', '01', 50); in Score-Werte einfügen('04', '02', 30); in Score-Werte einfügen('04', '03', 20); in Score-Werte einfügen('05', '01', 76); in Score-Werte einfügen('05', '02', 87); in Score-Werte einfügen('06', '01', 31); in Score-Werte einfügen('06', '03', 34); in Score-Werte einfügen('07', '02', 89); in Score-Werte einfügen('07', '03', 98); Daten abfragen Wählen Sie c_id, s_id, s_score, first_value(s_score) über w als first_v, last_value(s_score) über w als last_v, Summe(s_score) über w als Summe_v, max(s_score) über w als max_v, min(s_score) über w als min_v, count(s_id) über w als count_v, row_number() über w als row_id, rank() über w als rank_id, dense_rank() über w als dense_id aus dem Punktefenster war (Partition nach c_id, sortiert nach s_score, absteigend); Abfrageergebnisse Betrachtet man die statistischen Ergebnisse des Kurses Nr. 01, so betragen in der Spalte sum_v der ersten Datenzeile die ersten beiden Daten beide 160. Gemäß dem Funktionsprinzip sollten die Daten 80 und 160 betragen. Wenn wir uns die statistischen Ergebnisse des Kurses Nr. 02 ansehen, stellen wir fest, dass die Ergebnisse korrekt sind. Die erste Summe_v beträgt 90 und die zweite 179. Die tatsächliche Anzeige stimmt nicht mit dem erwarteten Ergebnis überein. Es ist ein Fehler aufgetreten.
Denken Überprüfung Die Daten für Kursnummer 02 sind korrekt, die für 01 jedoch nicht. Der Unterschied zwischen 01 und 02 besteht darin, dass die ersten beiden Studierenden in Kurs 01 die gleiche Punktzahl von 80 haben. Kann es sein, dass die Punktzahlen gleich waren und es dadurch zu einem Fehler bei der Addition kam? Um dieses Problem zu überprüfen, ändern Sie die Punktzahl von Kursnummer 01 und Studentennummer 01 auf 82 und führen Sie dann die Abfrage aus. Das Ergebnis ist wie folgt Die Spalte sum_v zeigt 82 und 162, was mit den erwarteten Ergebnissen übereinstimmt. Dies zeigt, dass bei der Ausführung der Summenfunktion in Fällen, in denen doppelte Daten vorhanden sind, dieselben Daten direkt und nicht schrittweise hinzugefügt werden.
Andere SQL-Überprüfung und -Vergleich Nach der obigen Überprüfung trat bei der Summierung in Mysql tatsächlich ein Fehler auf, der nicht schrittweise akkumuliert wurde. Ich habe überprüft, ob das gleiche Problem auf anderen Plattformen in Sqlite Expert 5.3 besteht und habe die gleichen Ergebnisse gefunden. Das ist merkwürdig. Wenn bei der Implementierung von MySQL ein Fehler auftritt, ist die Wahrscheinlichkeit, dass SQLite denselben Fehler macht, viel geringer. Könnte es an den Eigenschaften der Summen- und Fensterfunktionen liegen, wenn sie zusammen verwendet werden? Herzlich willkommen zum gemeinsamen Diskutieren und Forschen. Zusammenfassen Dies ist das Ende dieses Artikels über einen möglichen Fehler bei der Ausführung der Summenfunktion von MySQL auf der Fensterfunktion. Weitere Informationen zur Ausführung der Summenfunktion von MySQL auf der Fensterfunktion finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: nginx löst das Problem der langsamen Bildanzeige und des unvollständigen Downloads
>>: So implementieren Sie die autorisierte WeChat-Anmeldung elegant in einem Vue3-Projekt
A: Normalerweise im Client gespeichert. jwt oder ...
Linux ist derzeit das am weitesten verbreitete Se...
Frage 1: Wie weisen Sie den Browser an, die gewüns...
Schritte: 1. MySQL-Datenbank installieren 1. Lade...
Vorwort In diesem Artikel erfahren Sie hauptsächl...
1: Anmeldeeingang der Baidu-Website Website: http:...
Inhaltsverzeichnis Überblick Methode 1: Parameter...
MySql verwendet verknüpfte Tabellenabfragen, die ...
Ein Docker-Container startet beim Start beispiels...
Das Datenträgerkontingent ist die Speichergrenze ...
Als ich die CPP-Datei zum ersten Mal mit G++ komp...
1. Was ist In react Anwendungen werden Ereignisna...
Rendern Definieren Sie das Skelett, schreiben Sie...
Keil Da auf dem Computer eine relativ alte MySQL-...
Inhaltsverzeichnis 1. Mehrere .catch 2. Mehrere ....