En SQL, la clause GROUP BY nous permet de regrouper des données en fonction d'une ou plusieurs colonnes et de récupérer des résultats agrégés. Cependant, vous pouvez rencontrer un comportement différent lors de l'utilisation de cette clause dans MySQL et PostgreSQL, entraînant l'erreur « La colonne 'the_table.col3' doit apparaître dans une clause GROUP BY ou être utilisée comme fonction d'agrégation » dans PostgreSQL.
Les fonctions d'agrégation telles que MIN(), MAX(), COUNT() et SUM() nous permettent de combiner plusieurs valeurs en un seul résultat. Ces fonctions sont souvent utilisées avec la clause GROUP BY pour calculer des statistiques récapitulatives pour chaque groupe.
MySQL permet une interprétation détendue des règles GROUP BY, permettant aux colonnes non agrégées d'apparaître dans la liste de sélection même si elles ne sont pas incluses dans la clause GROUP BY. Ce comportement peut conduire à des valeurs non définies car MySQL peut choisir arbitrairement la valeur pour chaque groupe.
En revanche, PostgreSQL adhère strictement aux standards SQL. Lors de l'utilisation de la clause GROUP BY, toutes les colonnes non agrégées de la liste de sélection doivent être incluses dans la clause GROUP BY ou utilisées dans une fonction d'agrégation.
Pour résoudre l'erreur dans PostgreSQL, nous devons utiliser des fonctions d'agrégation pour calculer des statistiques récapitulatives pour chaque colonne de regroupement. Par exemple, nous pouvons utiliser la requête suivante :
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
Bien que l'approche de MySQL offre de la flexibilité, elle peut entraîner des valeurs indéfinies. L'application stricte des normes SQL par PostgreSQL garantit que les résultats agrégés sont cohérents et prévisibles. Lors de l'utilisation de la clause GROUP BY dans PostgreSQL, la meilleure pratique consiste toujours à inclure des colonnes non agrégées dans la clause GROUP BY ou à utiliser des fonctions d'agrégation.
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!