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 ?

Comment corriger l'erreur « Utilisation invalide de la fonction de groupe » de MySQL dans une sous-requête ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-11 22:38:46860parcourir

How to Fix MySQL's

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn