Detaillierte Erklärung von count(), group by, order by in MySQL

Detaillierte Erklärung von count(), group by, order by in MySQL

Ich bin vor Kurzem auf ein Problem gestoßen, als ich im Instant Messaging diese drei Schlüsselwörter gleichzeitig verwendet habe. Es dient zum Abfragen der Offline-Nachrichtendetails einer Person. Die von unserem Server an den Client zurückgegebenen Details umfassen drei Inhalte. Der erste erfordert eine Auflistung, welche Personen oder Gruppen Ihnen während der Offline-Zeit Nachrichten gesendet haben. Der zweite Inhalt gibt an, wie viele Offline-Nachrichten eine bestimmte Person oder Gruppe gesendet hat. Der dritte Inhalt zeigt die neueste Nachricht an. Gruppieren Sie nach Gruppen, die Ihnen Offlinenachrichten gesendet haben, count() ermittelt die Anzahl der Offlinenachrichten und sortiert nach Zeit, um die neuesten Nachrichten zu erhalten.

select count(1) as cnt, msg_data from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc group by from_company_id, from_user_id;

Dann tritt erwartungsgemäß ein Fehler auf, wenn mit „group by“ und „order by“ zusammen gesucht wird. Wir können verschachtelte Unterabfragen verwenden.

select count(1) as cnt, msg_data from (select * from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc) as temp_table group by from_company_id, from_user_id;

Wir können die Anzahl der bereits sortierten Ergebnisse gruppieren und berechnen. Hier gibt es eine versteckte Falle, die ich versehentlich vermieden habe. Tatsächlich führt count() dazu, dass die Sortierreihenfolge ungültig wird. Beispiel:

select count(1) as cnt, msg_data from t_im_chat_offline_msg where to_company_id = ? and to_user_id = ? order by create_time desc;

Die Anweisung erhält schließlich einen Datensatz, in dem msg_data tatsächlich überhaupt nicht sortiert ist, also die ursprüngliche Reihenfolge der Datenbank. Es sollte die Nachricht sein, die zuerst eingefügt wurde, also die alte Nachricht. Um dieses Problem zu vermeiden, wird zuerst die verschachtelte Unterabfrage sortiert und dann count() verwendet. Ich bin ihm unabsichtlich ausgewichen, habe es aber entdeckt, nachdem ich den Satz geändert und immer wieder getestet habe.

Das könnte Sie auch interessieren:
  • Nutzungs- und Leistungsoptimierungstechniken für die Aggregatfunktion „count“ in MySQL
  • MySQL count: ausführliche Erklärung und Funktionsbeispielcode
  • Detaillierte Erklärung zur Verwendung der COUNT-Funktion in MySQL
  • Eine kurze Diskussion über die MySQL-Zeilenanzahl
  • Zusammenfassung der Methoden zur Verbesserung der MySQL-Anzahl
  • Detaillierte Erklärung der Zählung ohne Filterbedingungen in MySQL
  • Zusammenfassung der Unterschiede zwischen count(*), count(1) und count(col) in MySQL
  • Vergleich der Verwendung von distinct und count(*) in MySQL
  • Eine praktische Möglichkeit, die Gesamtzahl der Zeilen in MySQL-Abfrageergebnissen zu zählen, ohne (*) zu zählen
  • Erklärung und Verwendung von found_row() und row_count() in MySQL
  • Detaillierte Erklärung zur korrekten Verwendung der Zählfunktion in MySQL

<<:  Beispiel für ein WeChat-Applet zum Erzielen des rotierenden Laterneneffekts

>>:  Ein vollständiges Beispiel für die mehrstufige Sprungfunktion (Seiten-Drilldown) von Vue für verwandte Seiten

Artikel empfehlen

Detaillierte Erklärung des daily_routine Beispielcodes in Linux

Schauen Sie sich zunächst den Beispielcode an: #/...

Einführung in die Verwendung von CSS3-Filterattributen

1. Einleitung Beim Schreiben von Animationseffekt...

Vue implementiert den Schnittstellen-Gleiteffekt

In diesem Artikelbeispiel wird der spezifische Co...

Vue implementiert den Anruf der PC-Kamera, um Fotos in Echtzeit aufzunehmen

Vue ruft die PC-Kamera auf, um Bilder in Echtzeit...

So ändern Sie die Kodierung der MySQL-Datenbank in utf8mb4

Die utf8mb4-Kodierung ist eine Obermenge der utf8...

Docker mountet lokale Verzeichnisse und Datenvolumen-Container-Operationen

1. Docker mountet das lokale Verzeichnis Docker k...

vue2.x-Konfiguration von vue.config.js zur Projektoptimierung

Inhaltsverzeichnis Vorwort vue.config.js-Konfigur...

So legen Sie mit CSS eine Hintergrundunschärfe fest

Beim Erstellen einiger Seiten müssen wir häufig H...

Beschreiben Sie kurz den Unterschied zwischen Redis und MySQL

Wir wissen, dass MySQL ein persistenter Speicher ...

Detaillierte Erklärung der Tastaturereignisse von Vue

Inhaltsverzeichnis Allgemeine Schlüsselaliase Sch...

Beispiel für das Einrichten einer Whitelist in Nginx mithilfe des Geomoduls

Ursprüngliche Konfiguration: http { ...... Verbin...