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

Ubuntu kompiliert Kernelmodule und der Inhalt wird im Systemprotokoll angezeigt

Inhaltsverzeichnis 1.Linux-Anmeldeschnittstelle 2...

Ein einfaches Beispiel zur Implementierung einer Fuzzy-Abfrage in Vue

Vorwort Die sogenannte Fuzzy-Abfrage dient dazu, ...

Eine detaillierte Einführung in Linux-Dateiberechtigungen

Die Stärke von Linux liegt in seinem Mehrbenutzer...

jQuery implementiert die Anzeige und Ausblendung von Anzeigenanimationen

Wir sehen oft, dass Anzeigen nach ein paar Sekund...

Auf Wiedersehen Docker: So wechseln Sie in 5 Minuten zu Containerd

Docker ist eine sehr beliebte Containertechnologi...

Implementierung zum Zeichnen einer Audio-Wellenform mit wavesurfer.js

1. Sehen Sie sich die Renderings an Weiterleiten ...

Übersicht über die Definition der HTC-Komponenten nach IE5.0

Vor der Veröffentlichung von Microsoft IE 5.0 best...

Über die praktische Anwendung von HTML-Mailto (E-Mail) sprechen

Wie wir alle wissen, ist „mailto“ ein sehr praktis...

Ubuntu-Grundlagen-Tutorial: apt-get-Befehl

Vorwort Der Befehl apt-get ist ein Paketverwaltun...

Implementierungscode des JQuery-Schrittfortschrittsachsen-Plug-Ins

Jeden Tag ein jQuery-Plugin - Schritt-Fortschritt...

Docker-Compose-Schritte zum Konfigurieren der Spring-Umgebung

Vor Kurzem musste ich das Projekt für die Mitglie...