Maison > base de données > tutoriel mysql > Comment puis-je éviter les erreurs « pas une expression GROUP BY » lors de l'utilisation de fonctions d'agrégation dans SQL ?

Comment puis-je éviter les erreurs « pas une expression GROUP BY » lors de l'utilisation de fonctions d'agrégation dans SQL ?

Susan Sarandon
Libérer: 2025-01-13 06:15:43
original
511 Les gens l'ont consulté

How Can I Avoid

Comprendre la clause GROUP BY et les fonctions d'agrégation de SQL

L'utilisation de la clause GROUP BY de SQL conduit souvent à une confusion quant aux attributs accessibles après le regroupement. Précisons :

GROUP BY et colonnes non agrégées

Tenter d'accéder aux colonnes non agrégées après le regroupement entraîne une erreur « pas une expression GROUP BY ». En effet, chaque groupe peut contenir plusieurs lignes et les valeurs des colonnes non agrégées différeront d'une ligne à l'autre.

Fonctions agrégées : un examen plus approfondi

À l'inverse, les fonctions d'agrégation (comme SUM, MAX, AVG, etc.) peuvent accéder aux colonnes sous-jacentes au sein de chaque groupe même après avoir appliqué GROUP BY. Ils calculent une valeur récapitulative unique pour l'ensemble du groupe.

Exemple :

Considérez cette requête :

SELECT *
FROM order_details
GROUP BY order_no;
Copier après la connexion

Cette requête échouera car elle tente de sélectionner toutes les colonnes sans utiliser les fonctions d'agrégation sur les colonnes non agrégées telles que order_price.

Cependant, il s'agit d'une requête valide :

SELECT SUM(order_price)
FROM order_details
GROUP BY order_no;
Copier après la connexion

Ici, SUM traite chaque groupe, en additionnant les order_price valeurs pour donner un prix total pour chacun order_no.

Inclure les colonnes non agrégées dans GROUP BY

Pour accéder aux colonnes non agrégées après le regroupement, incluez-les dans la clause GROUP BY :

SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no;
Copier après la connexion

Cela récupère correctement chaque order_no ainsi que son total order_price.

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!

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