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
Susan Sarandonoriginal
2025-01-13 06:15:43450parcourir

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 :

<code class="language-sql">SELECT *
FROM order_details
GROUP BY order_no;</code>

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 :

<code class="language-sql">SELECT SUM(order_price)
FROM order_details
GROUP BY order_no;</code>

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 :

<code class="language-sql">SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no;</code>

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:
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