Clause GROUP BY stricte de PostgreSQL et gestion des erreurs
L'exécution d'une requête comme SELECT * FROM the_table GROUP BY col2
dans PostgreSQL entraîne l'erreur : "la colonne "the_table.col3" doit apparaître dans la clause GROUP BY ou être utilisée dans une fonction d'agrégation." En effet, PostgreSQL adhère strictement aux normes SQL, exigeant que toutes les colonnes de la liste SELECT soient incluses dans la clause GROUP BY ou fassent partie d'une fonction d'agrégation.
Fonctions agrégées : la solution
Les fonctions d'agrégation, telles que SUM()
, MIN()
, MAX()
, AVG()
et COUNT()
, calculent une valeur unique à partir d'un ensemble de valeurs. Pour corriger l'erreur PostgreSQL, vous devez appliquer une fonction d'agrégation à toute colonne non présente dans la clause GROUP BY
.
Comportement non standard de MySQL
La gestion plus indulgente de GROUP BY
par MySQL est une extension non standard. Il permet de sélectionner des colonnes non agrégées ne figurant pas dans la clause GROUP BY
, mais les valeurs sélectionnées sont non déterministes ; MySQL sélectionne essentiellement une valeur arbitraire dans chaque groupe pour ces colonnes. Cela peut conduire à des résultats imprévisibles et incohérents.
L'approche plus stricte de PostgreSQL garantit des résultats de requête cohérents et reproductibles.
Correction de la requête PostgreSQL
Pour corriger la requête PostgreSQL, utilisez une fonction d'agrégation sur col3
(et sur toute autre colonne ne figurant pas dans la clause GROUP BY
). Par exemple :
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
Cette requête révisée utilise MIN()
pour sélectionner la valeur minimale de col3
pour chaque groupe défini par col2
. Vous devez choisir la fonction d'agrégation appropriée (par exemple, MAX()
, AVG()
) en fonction du résultat souhaité.
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!