Résolution de l'erreur SQL « Doit apparaître dans la clause GROUP BY ou être utilisé dans une fonction d'agrégation »
L'erreur SQL "la colonne "makerar.wmname" doit apparaître dans la clause GROUP BY ou être utilisée dans une fonction d'agrégation" se produit lorsque votre requête regroupe des données (à l'aide de GROUP BY
) mais sélectionne des colonnes non impliquées dans le regroupement. SQL exige que toute colonne sélectionnée ne figurant pas dans la clause GROUP BY
soit agrégée (par exemple, en utilisant MAX
, MIN
, AVG
, SUM
, COUNT
) ou omise.
Solutions :
Voici plusieurs approches pour résoudre ce problème :
Inclure wmname
dans la clause GROUP BY
:
C'est la solution la plus simple si vous avez besoin de toutes les wmname
valeurs associées à chaque cname
unique.
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname;</code>
Sous-requête pour la valeur maximale et JOIN :
Cette approche est utile lorsque vous n'avez besoin que du wmname
correspondant au maximum avg
pour chaque cname
.
<code class="language-sql">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 m.avg = t.mx;</code>
Ceci trouve d'abord le maximum avg
pour chaque cname
dans une sous-requête. Ensuite, il joint ce résultat à la table d'origine pour récupérer le wmname
correspondant.
Fonctions de fenêtre (si prises en charge) :
Si votre système de base de données prend en charge les fonctions de fenêtre (la plupart des systèmes modernes le font), cela fournit une solution concise et efficace.
<code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx FROM makerar;</code>
Les fonctions de fenêtre calculent le maximum avg
pour chaque cname
partition sans modifier la structure de ligne d'origine. Vous pourriez avoir besoin de DISTINCT
si vous souhaitez uniquement des résultats uniques.
En implémentant l'une de ces méthodes, vous récupérerez correctement la moyenne maximale (avg
) pour chaque cname
tout en gérant la colonne wmname
de manière appropriée, éliminant ainsi l'erreur SQL. Choisissez la solution qui correspond le mieux à vos besoins spécifiques en matière de données et aux capacités de votre base de donné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!