


Pourquoi « La colonne doit-elle apparaître dans la clause GROUP BY ou être utilisée dans une fonction d'agrégation » se produit-elle dans les requêtes SQL ?
Jan 18, 2025 pm 02:01 PMErreur SQL : la colonne doit apparaître dans une clause GROUP BY ou être utilisée comme fonction d'agrégation
Lors de l'exécution d'une requête d'agrégation groupée, vous devez vous assurer que les colonnes sélectionnées soit apparaissent dans la clause GROUP BY
, soit participent au calcul de la fonction d'agrégation. Sinon, un message d'erreur similaire à « La colonne doit apparaître dans une clause GROUP BY ou être utilisée comme fonction d'agrégation » apparaîtra.
Description du problème
Supposons qu'il existe une table nommée makerar
avec les colonnes cname
, wmname
et avg
. Le but est d'obtenir la cname
valeur maximale pour chaque avg
distinct. Cependant, exécutez la requête suivante :
SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;
générera une erreur car la colonne wmname
n'est ni incluse dans la clause GROUP BY
ni utilisée comme fonction d'agrégation.
Solution
Il existe deux manières principales de résoudre ce problème :
1. Sous-requête et méthode de jointure
Cette méthode utilise une sous-requête pour calculer la valeur cname
maximale pour chaque avg
, puis joint la sous-requête à la table principale pour récupérer le wmname
correspondant :
SELECT m.cname, m.wmname, t.mx FROM ( SELECT cname, MAX(avg) AS mx FROM makerar GROUP BY cname ) t JOIN makerar m ON m.cname = t.cname AND t.mx = m.avg ;
2. Méthode de fonction fenêtre
Les fonctions de fenêtre offrent une alternative plus simple pour effectuer des calculs agrégés au sein de groupes :
SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx FROM makerar ;
Remarque : Bien que la fonction de fenêtre affiche correctement la valeur maximale cname
pour chaque avg
, cela peut entraîner des enregistrements en double.
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!

Outils chauds Tags

Article chaud

Outils chauds Tags

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
