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

Quels sont les avantages du mode only_full_group_by ?

only_full_group_by =sur indique au moteur MySQL :Ne pas appliquer GROUP BY lorsque vous avez des doutes sur les résultats à afficher et que vous lancez une erreur. Seulement appliquez-le si Group By vous dit spécifiquement quoi faire. c'est-à-dire lorsque le Group By est complet et parfait !

only_full_group_by =désactivé indique au moteur MySQL :toujours appliquer GROUP BY et si vous avez des doutes sur les résultats à choisir, choisissez-en un au hasard !

Vous n'êtes pas obligé de le désactiver si vous utilisez GROUP BY correctement !

Exemple :

Tableau :utilisateurs

 id   |  name
----------------
  1      ali
  2      john
  3      ali

Lorsque vous utilisez GROUP BY sur le name colonne :

SELECT * FROM users GROUP BY name;

Il y a deux résultats possibles :

  1      ali
  2      john     

OU

  2      john     
  3      ali

MYSQL ne sait pas quel résultat choisir ! Parce qu'il y a différents id s mais les deux ont name=ali .

Solution 1 :

sélectionner uniquement le name champ :

SELECT name FROM users GROUP BY name;

résultat :

  ali
  john     

C'est une solution parfaite. supprimer les colonnes qui font GROUP BY confus. Cela signifie que vous savez ce que vous faites. Généralement, vous n'avez pas besoin de
ces colonnes, mais si vous en avez besoin, passez à la Solution3 !

Solution 2 :

Désactiver only_full_group_by . MYSQL choisira l'un des deux résultats possibles ALEATOIRE !! (Ce n'est pas grave si vous ne vous souciez pas vraiment de l'id il choisira, mais n'oubliez pas de l'activer immédiatement après votre requête pour éviter les comportements inattendus dans les futurs groupBys)

Solution3

Utiliser un Aggregate fonction comme MIN() , MAX() pour aider MYSQL à décider ce qu'il doit choisir.

Par exemple :

SELECT MAX(id), name FROM users GROUP BY name;

résultat :

  2      john     
  3      ali

Il choisira le ali ligne qui a le maximum id .