Maison  >  Article  >  base de données  >  Partagez comment utiliser count(), group by, order by dans MySQL

Partagez comment utiliser count(), group by, order by dans MySQL

小云云
小云云original
2018-01-17 10:47:462370parcourir

Cet article explique principalement comment utiliser count(), group by, order by dans MySQL, ordre par requête de tri, ordre ascendant, ordre descendant dans MySQL, requête groupe par groupe et ayant ne peut être utilisé que. dans la clause group by Agissant au sein d'un groupe, la clause conditionnelle have peut être directement suivie d'une expression de fonction. Les instructions de requête utilisant la clause group by nécessitent l'utilisation de fonctions d'agrégation.

J'ai récemment rencontré un problème lors de la messagerie instantanée, et ces trois mots-clés étaient utilisés en même temps. Il s'agit d'interroger les détails des messages hors ligne d'une personne. Les détails renvoyés par notre serveur au client incluent trois contenus. Le premier nécessite la liste des personnes ou des groupes qui vous ont envoyé des messages pendant la période hors ligne. des messages hors ligne ont été envoyés par une certaine personne ou un certain groupe, et le troisième extrait le dernier et l'affiche. Évidemment, regroupez par groupes les personnes ou les groupes qui vous ont envoyé des messages hors ligne, count() obtient le nombre de messages hors ligne et triez par ordre chronologique les derniers messages.

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;

Ensuite, comme prévu, une erreur sera signalée lorsque group by et order by sont récupérés ensemble. Nous pouvons utiliser des sous-requêtes imbriquées.

sélectionnez count(1) comme cnt, msg_data from (sélectionnez * from t_im_chat_offline_msg où to_company_id = ? et to_user_id = ? order by create_time desc) comme groupe temp_table par from_company_id, from_user_id ;<code>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;<br> code>

Nous pouvons regrouper l'ensemble de résultats triés et calculer la quantité. Il y a un autre trou caché ici, que j'ai accidentellement évité. En fait, count() rendra l'ordre par tri invalide :

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;

This The. msg_data dans l'enregistrement obtenu à la fin de l'instruction est en fait le résultat d'aucun tri, c'est-à-dire l'ordre d'origine de la base de données. Il doit s'agir du message inséré en premier, c'est-à-dire de l'ancien message. Afin d'éviter ce problème, la sous-requête imbriquée est d'abord triée ici, puis utilisée avec count() pour l'éviter. Je me suis échappé involontairement, mais heureusement je l'ai découvert après avoir changé la phrase à plusieurs reprises et l'avoir testée.

Recommandations associées :

10 articles recommandés sur count()

Utiliser Group By dans MySql pour regrouper plusieurs champs Méthode

Explication détaillée des règles de tri multi-champs Order By dans MySQL

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn