Maison > base de données > tutoriel mysql > Pourquoi PostgreSQL nécessite-t-il des colonnes non agrégées dans les fonctions GROUP BY ou agrégées ?

Pourquoi PostgreSQL nécessite-t-il des colonnes non agrégées dans les fonctions GROUP BY ou agrégées ?

Barbara Streisand
Libérer: 2025-01-18 09:46:38
original
700 Les gens l'ont consulté

Why Does PostgreSQL Require Non-Aggregated Columns in GROUP BY or Aggregate Functions?

Clause GROUP BY de PostgreSQL : résolution des erreurs courantes

Le comportement GROUP BY strict de PostgreSQL conduit souvent à 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." Cet article clarifie ce comportement et propose des solutions.

Comprendre les fonctions d'agrégation en SQL

Les fonctions d'agrégation, telles que MIN, MAX, SUM, COUNT et AVG, résument les données au sein des groupes. Ils produisent un résultat unique à partir de plusieurs valeurs d'entrée.

L'erreur PostgreSQL GROUP BY expliquée

L'erreur se produit lorsqu'une clause GROUP BY est utilisée sans fonctions d'agrégation appropriées. La requête tente de regrouper les lignes en fonction d'une colonne non agrégée (par exemple, col2) tout en sélectionnant d'autres colonnes non agrégées (col3, col1) qui ne font pas partie du regroupement. PostgreSQL exige que toutes les colonnes non agrégées sélectionnées soient dans la clause GROUP BY ou soient traitées par une fonction d'agrégation.

PostgreSQL vs MySQL GROUP BY Gestion

L'implémentation GROUP BY de MySQL est moins stricte. Cela peut permettre de sélectionner des colonnes non agrégées non présentes dans la clause GROUP BY, mais cela peut entraîner des valeurs imprévisibles, surtout si ces colonnes ont des valeurs variables au sein d'un groupe. Ce comportement n'est pas conforme au standard SQL.

Correction des GROUP BY requêtes PostgreSQL

Pour corriger l'erreur PostgreSQL, appliquez une fonction d'agrégation à toutes les colonnes non agrégées de la liste SELECT. Par exemple :

<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table
GROUP BY col2;</code>
Copier après la connexion

Cette requête révisée garantit un regroupement précis et calcule les valeurs minimales pour col3 et col1 au sein de chaque groupe.

Bonnes pratiques et normes SQL

Utilisez toujours des fonctions d'agrégation avec GROUP BY pour garantir la cohérence des données et des résultats prévisibles. Cela est conforme à la norme SQL92, qui exige que les colonnes non agrégées de la liste SELECT soient soit dans la clause GROUP BY, soit fonctionnellement dépendantes des colonnes de regroupement.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal