Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Utilisation invalide de la fonction de groupe » de MySQL dans une sous-requête ?
Débogage de l'erreur « Utilisation non valide de la fonction de groupe » de MySQL
Problème :
Une requête conçue pour identifier les pièces fournies par au moins deux fournisseurs a généré une erreur « Utilisation non valide de la fonction de groupe » :
<code class="language-sql">SELECT c1.pid -- Select part ID (pid) FROM Catalog AS c1 -- From the Catalog table WHERE c1.pid IN ( -- Where pid is in the set: SELECT c2.pid -- Of pids FROM Catalog AS c2 -- From the Catalog table WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- Incorrect: COUNT in WHERE clause );</code>
Le problème :
L'erreur provient du mauvais placement de la fonction COUNT()
. La clause WHERE
filtre les lignes individuelles avant le regroupement, rendant la fonction d'agrégation COUNT()
invalide dans ce contexte.
Solution :
La bonne approche consiste à utiliser la clause HAVING
, qui filtre après le regroupement et l'agrégation :
<code class="language-sql">SELECT c1.pid FROM Catalog AS c1 WHERE c1.pid IN ( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(c2.sid) >= 2 );</code>
Explication :
La requête révisée regroupe la table Catalog
par pid
en utilisant GROUP BY c2.pid
. La clause HAVING
filtre ensuite ces groupes, en ne conservant que ceux dont le nombre d'identifiants fournisseurs (sid
) est supérieur ou égal à deux. Cela identifie correctement les pièces avec au moins deux fournisseurs. La requête externe sélectionne ensuite les pid
valeurs de ces groupes filtrés.
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!