Maison  >  Article  >  base de données  >  Alternative non valide pour utiliser group by et order by en même temps dans MySQL

Alternative non valide pour utiliser group by et order by en même temps dans MySQL

巴扎黑
巴扎黑original
2017-06-23 11:10:123234parcourir

Avant-propos

Au cours de l'année écoulée, en raison de besoins professionnels, j'ai principalement utilisé des bases de données NoSql, et je me sens de moins en moins familier avec les bases de données relationnelles. Une affaire de meurtre causée par group by et order by. est parti de ce né. Notez ici les urgences.

Exigences

Tout d'abord, examinons la structure globale de la table.
Alternative non valide pour utiliser group by et order by en même temps dans MySQL
trouve désormais les dernières données dans chaque barCode.

Parce qu'il y a trop de données, l'effet n'est pas très bon. Prenons comme exemple une donnée avec barCode comme 4565789.

SELECTbarCode,
    priCommodityID,
    createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC;

Alternative non valide pour utiliser group by et order by en même temps dans MySQL

Essai et erreur

Puisque je n'ai pas écrit SQL depuis longtemps. J’ai donc d’abord pensé à utiliser une requête combinée group by et order by.

SELECTbarCode,
    priCommodityID,
    createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCodeORDER BYcreateDate DESC;

Les résultats sont les suivants :
Alternative non valide pour utiliser group by et order by en même temps dans MySQL
Vous pouvez voir que ce n'est pas le résultat que nous souhaitons, order by n'a aucun effet.
Ensuite, essayons de combiner les deux à l’aide de sous-requêtes. Trier d'abord puis regrouper

SELECT*FROM(SELECTbarCode,
            priCommodityID,
            createDateFROMtb_history_versionWHEREbarCode = '4565789'ORDER BYcreateDate DESC) AS AGROUP BYA.barCode;

Le résultat est toujours décevant
Alternative non valide pour utiliser group by et order by en même temps dans MySQL

Solution

J'ai essayé les deux méthodes ci-dessus Bien que le résultat est triste, le travail doit continuer. J'ai donc recherché diverses informations en ligne pour voir si je pouvais résoudre le problème d'une autre manière. J'ai accidentellement vu que group_concat pouvait être trié par groupes, alors j'ai essayé

SELECTbarCode,
    GROUP_CONCAT(
        priCommodityIDORDER BYcreateDate DESC) AS priCommodityID,
    GROUP_CONCAT(
        createDateORDER BYcreateDate DESC) AS createDateFROMtb_history_versionWHEREbarCode = '4565789';

Les résultats sont les suivants
Alternative non valide pour utiliser group by et order by en même temps dans MySQL
Vous pouvez voyez que la commande est OK, mais toutes les données sont regroupées. Un traitement supplémentaire des caractères d'interception est requis

SELECTbarCode,
    SUBSTRING_INDEX(
        group_concat(
            priCommodityIDORDER BYcreateDate DESC),',',1) AS priCommodityID,
    SUBSTRING_INDEX(
        group_concat(
            createDateORDER BYcreateDate DESC),',',1) AS createDateFROMtb_history_versionWHEREbarCode = '4565789'GROUP BYbarCode;

Alternative non valide pour utiliser group by et order by en même temps dans MySQL
ok ! À ce stade, nous constatons que nos besoins initiaux ont été satisfaits.

Résumé

Utiliser group by et order by en même temps n'a aucun effet. Vous pouvez utiliser group_concat et groub by à la place. Le tri des champs peut être implémenté dans group_concat.

Article de référence


Adresse initiale

http://www.devzxd.top/2017/05/27/mysql-groupby -orderby.html

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