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

js zum Schreiben des Karusselleffekts

In diesem Artikel wird der spezifische Code von j...

Tutorial zur Installation von VMWare15.5 unter Linux

Um VMWare unter Linux zu installieren, müssen Sie...

Die detaillierteste Methode zur Installation von Docker auf CentOS 8

Installieren Sie Docker unter CentOS 8 Offizielle...

Vue implementiert die Anmeldung mit grafischem Bestätigungscode

In diesem Artikelbeispiel wird der spezifische Co...

Schnelle Lösung zum Vergessen des MySQL8-Passworts

Vorwort Wenn wir das MySQL-Datenbankkennwort verg...

Problemlösungsvorgänge für Alpine Docker-Bildschriftarten

1. Führen Sie Schriftarten aus, öffnen Sie den Sc...

So installieren Sie Nginx in Docker

Installieren Sie Nginx auf Docker Nginx ist ein l...

Vue Router vue-router ausführliche Erklärung Anleitung

Chinesische Dokumentation: https://router.vuejs.o...