Lorsque vous rencontrez l'erreur "n'est pas dans GROUP BY" dans MySQL, il indique que vous avez un écart entre les colonnes sélectionnées dans la clause SELECT et celles incluses dans la clause GROUP BY.
Dans les exemples donnés, la première requête (SELECT count(DISTINCT name)) regroupe correctement par une seule colonne (nom), tandis que la deuxième requête (SELECT name, type, language, code`) tente de récupérer plus de colonnes que ce qui est inclus dans la clause GROUP BY`.
Pour résoudre cette erreur, il est essentiel d'assurer un "group by complet", où tous les colonnes sélectionnées doivent également faire partie de la clause GROUP BY. Cela garantit que le résultat représente un résumé correct pour chaque groupe.
Pour la requête donnée, la syntaxe correcte serait :
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
SQL92 exige que toutes les colonnes de la clause SELECT fassent partie de la clause GROUP BY. SQL99 assouplit légèrement cette restriction, autorisant les colonnes qui dépendent fonctionnellement de la clause GROUP BY.
Le comportement par défaut de MySQL autorise un "regroupement partiel", ce qui signifie que les colonnes non incluses dans la clause GROUP BY peuvent être sélectionnées. mais cela peut conduire à des résultats non déterministes. Pour éviter cela, vous pouvez définir la variable @@sql_mode sur « ONLY_FULL_GROUP_BY ». Cela forcera MySQL à adhérer à l'ensemble du groupe par exigence.
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!