Maison > base de données > tutoriel mysql > Comment utiliser correctement les fonctions GROUP dans les sous-requêtes MySQL pour rechercher des pièces fournies par plusieurs fournisseurs ?

Comment utiliser correctement les fonctions GROUP dans les sous-requêtes MySQL pour rechercher des pièces fournies par plusieurs fournisseurs ?

DDD
Libérer: 2025-01-11 22:46:45
original
1011 Les gens l'ont consulté

How to Correctly Use GROUP Functions in MySQL Subqueries to Find Parts Supplied by Multiple Suppliers?

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal