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
Libérer: 2025-01-11 22:38:46
original
931 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal