Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quels champs de ligne sont renvoyés lors du regroupement avec MySQL ?

Quel identifiant va être renvoyé ( 1, 2 ou 3) ?

R :Le serveur choisira pour tous les enregistrements portant le même nom l'identifiant qu'il souhaite (probablement le plus rapide à récupérer, ce qui est imprévisible). Pour citer la documentation officielle :

Beaucoup plus d'informations dans ce lien .

Quel identifiant cette requête va-t-elle à ORDER BY ( Identique à celle renvoyée ? ... voir question 1 ) ?

Cela n'a aucun sens de savoir dans quel ordre les données récupérées seront retournées car vous ne pouvez pas prédire le résultat que vous allez obtenir. Cependant, il est très probable que vous obteniez le résultat trié par la colonne ID imprévisible.

Pouvez-vous contrôler quel identifiant est renvoyé/utilisé pour la commande ? par exemple. Renvoie le plus grand identifiant ou le premier identifiant d'un GROUP.

Vous devriez supposer à ce stade que vous ne pouvez pas. Relisez la documentation.

Pour rendre les choses encore plus claires :vous ne pouvez pas prédire le résultat d'une clause GROUP BY mal utilisée. Le principal problème avec MySQL est qu'il vous permet de l'utiliser de manière non standard, mais vous devez savoir comment utiliser cette fonctionnalité. Le point principal derrière cela est de regrouper par champs dont vous savez qu'ils seront toujours les mêmes. EX :

SELECT id, name, COUNT( * ) AS frequency
FROM table
GROUP BY id

Ici, vous connaissez name sera unique en tant que id détermine fonctionnellement name . Donc, le résultat que vous connaissez est valide. Si vous regroupiez également par nom, cette requête serait plus standard mais fonctionnerait légèrement moins bien dans MySQL.

Pour finir, tenez compte du fait que, d'après mon expérience, les résultats de ces requêtes non standard pour les champs sélectionnés et non groupés sont généralement ceux que vous obtiendriez en appliquant un GROUP BY puis un ORDER BY sur ce champ. C'est pourquoi tant de fois il semble travailler. Cependant, si vous continuez à tester, vous finirez par découvrir que cela se produit 95% du temps. Et vous ne pouvez pas compter sur ce nombre.