Explication détaillée de l'erreur PostgreSQL GROUP BY
Lors de l'interrogation d'une table de base de données à l'aide de la clause GROUP BY
dans PostgreSQL, toutes les colonnes incluses dans la liste SELECT
mais qui ne sont pas agrégées doivent apparaître dans la clause GROUP BY
ou être utilisées comme arguments d'une fonction d'agrégation. Cette erreur se produit lorsque vous essayez de regrouper selon une colonne spécifique (telle que col2
), mais l'instruction SELECT
contient d'autres colonnes qui ne sont pas agrégées (telles que col3
et col1
).
Fonction d'agrégation
Les fonctions d'agrégation nous permettent de résumer plusieurs lignes de données. Les fonctions d'agrégation courantes incluent :
COUNT
(Compter les enregistrements)SUM
(calcule la somme des colonnes)MIN
(Trouver la valeur minimale)MAX
(Trouver la valeur maximale)AVG
(calculer la moyenne)Différences de traitement GROUP BY entre MySQL et PostgreSQL
MySQL gère la clause GROUP BY
différemment de PostgreSQL. Dans MySQL, même si la liste SELECT
contient des colonnes non agrégées qui n'apparaissent pas dans la clause GROUP BY
, elle est toujours autorisée. Cependant, les valeurs renvoyées par ces colonnes peuvent varier arbitrairement entre les enregistrements, entraînant des incohérences potentielles.
En revanche, PostgreSQL adhère strictement au standard SQL, exigeant que les colonnes non agrégées soient incluses dans une clause GROUP BY
ou utilisées comme arguments pour agréger des fonctions.
Solution
Pour résoudre cette erreur dans PostgreSQL, réécrivez la requête pour utiliser les fonctions d'agrégation sur les colonnes non agrégées. Par exemple :
<code class="language-sql">SELECT col2, MIN(col3) AS min_col3, MIN(col1) AS min_col1 FROM the_table GROUP BY col2;</code>
Cette requête utilise la fonction d'agrégation MIN
pour récupérer la valeur minimale de col2
et col3
dans chaque groupe défini par col1
.
En utilisant des fonctions d'agrégation, la requête garantit que les valeurs renvoyées sont cohérentes et conformes aux exigences de la clause PostgreSQL GROUP BY
.
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!