Maison > base de données > tutoriel mysql > 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

巴扎黑
Libérer: 2017-06-23 11:10:12
original
3289 Les gens l'ont consulté

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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';
Copier après la connexion

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;
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal