Dépannage de l'erreur « Utilisation invalide de la fonction de groupe » de MySQL
Ce guide traite de l'erreur MySQL courante « Utilisation invalide de la fonction de groupe », souvent rencontrée lors de l'interrogation de données impliquant plusieurs fournisseurs et pièces. Le but est de trouver des pièces fournies par au moins deux fournisseurs différents.
Le problème principal réside dans l'utilisation abusive de la clause WHERE
lors du traitement de fonctions d'agrégation telles que COUNT()
dans des sous-requêtes. WHERE
filtre les lignes individuelles avant le regroupement, tandis que HAVING
filtre les groupes de lignes après l'agrégation. Puisque nous devons filtrer en fonction du nombre de fournisseurs par pièce (une valeur globale), HAVING
est essentiel.
L'approche correcte implique une sous-requête pour identifier les pièces répondant aux critères (au moins deux fournisseurs), puis l'utilisation de IN
pour sélectionner ces pièces dans la requête principale. Le changement crucial consiste à remplacer WHERE
par HAVING
dans la sous-requête :
La structure de sous-requête corrigée ressemble à ceci :
<code class="language-sql">( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(DISTINCT c2.sid) >= 2 )</code>
Cette sous-requête révisée utilise GROUP BY c2.pid
pour regrouper les lignes par ID de pièce et HAVING COUNT(DISTINCT c2.sid) >= 2
pour filtrer ces groupes, en ne conservant que ceux avec deux ID de fournisseur distincts ou plus. Le mot-clé DISTINCT
garantit que chaque fournisseur n'est compté qu'une seule fois, même s'il fournit plusieurs fois la même pièce.
En bref, n'oubliez pas d'utiliser HAVING
avec les fonctions d'agrégation dans les sous-requêtes pour filtrer correctement les groupes de lignes en fonction des valeurs agrégées dans MySQL. Cette distinction est essentielle pour résoudre l'erreur « Utilisation non valide de la fonction de groupe » et récupérer avec précision les données souhaitées.
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!