Heim >Datenbank >MySQL-Tutorial >Detaillierte Erläuterung der spezifischen Verwendung von count(), group by, order by in MySQL
MySQL in Reihenfolgeer nach Sortierung Abfrage , aufsteigender Reihenfolge aufsteigend, absteigender Reihenfolge absteigend, gruppieren nach Gruppe Abfrage, mit Dose Nur in der Group-By-Klausel verwendet werden und innerhalb der Gruppe agieren, kann auf die Have-Bedingungsklausel direkt der -Funktionsausdruck folgen. Abfrageanweisungen, die die Group-By-Klausel verwenden, müssen die Funktion Aggregation verwenden.
Ich bin vor Kurzem auf ein Problem beim Chatten gestoßen und diese drei Schlüsselwörter wurden gleichzeitig verwendet. Dabei werden die Details der Offline-Nachrichten einer Person abgefragt. Zu den von unserem Server an den Client zurückgegebenen Details gehört die Auflistung der Personen oder Gruppen, die Ihnen während des Offline-Zeitraums Nachrichten gesendet haben Offline-Nachrichten wurden von einer bestimmten Person oder Gruppe gesendet, und der dritte nimmt die neueste heraus und zeigt sie an. Gruppieren Sie natürlich nach Gruppen, welche Personen oder Gruppen Ihnen Offline-Nachrichten gesendet haben, count() ermittelt die Anzahl der Offline-Nachrichten und sortiert nach Zeit die neuesten Nachrichten.
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;
Wie erwartet wird ein Fehler gemeldet, wenn „Gruppieren nach“ und „Bestellen nach“ zusammen abgerufen werden. 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 sortierte Ergebnismenge gruppieren und die Menge berechnen. Hier gibt es eine weitere versteckte Grube, die ich versehentlich vermieden habe. Tatsächlich führt count() dazu, dass die Reihenfolge durch Sortieren ungültig wird. Zum 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;
Der letzte durch diese Anweisung erhaltene Datensatz. msg_data ist eigentlich das Ergebnis überhaupt keiner Sortierung, was der ursprünglichen Reihenfolge der Datenbank entspricht. Es sollte die Nachricht sein, die zuerst eingefügt wird, also die Nachricht mit der alten Zeit. Um dieses Problem zu vermeiden, wird die verschachtelte Unterabfrage hier zuerst sortiert und dann verwendet, um count() zu verwenden, um es zu vermeiden. Ich bin unbeabsichtigt davongekommen, aber zum Glück habe ich es herausgefunden, nachdem ich den Satz wiederholt geändert und getestet hatte.
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der spezifischen Verwendung von count(), group by, order by in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!