Maison > base de données > tutoriel mysql > Pourquoi ma requête PostgreSQL avec une clause GROUP BY génère-t-elle une erreur ?

Pourquoi ma requête PostgreSQL avec une clause GROUP BY génère-t-elle une erreur ?

Mary-Kate Olsen
Libérer: 2025-01-18 10:05:09
original
197 Les gens l'ont consulté

Why Does My PostgreSQL Query with a GROUP BY Clause Throw an Error?

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>
Copier après la connexion

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!

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