Maison >base de données >tutoriel mysql >Comment la clause GROUP BY de SQL fonctionne-t-elle avec et sans fonctions d'agrégation ?

Comment la clause GROUP BY de SQL fonctionne-t-elle avec et sans fonctions d'agrégation ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-13 07:10:45614parcourir

How Does SQL's GROUP BY Clause Work with and Without Aggregate Functions?

Clause GROUP BY de SQL : une analyse approfondie

La clause SQL GROUP BY est un outil puissant pour regrouper des lignes en fonction de colonnes spécifiées, permettant des calculs agrégés (comme SUM, COUNT, AVG) sur des données groupées. Explorons son comportement avec et sans fonctions d'agrégation.

GROUP BYSans fonctions agrégées : le piège

L'utilisation de GROUP BY sans fonction d'agrégation entraîne une erreur. Prenons cet exemple :

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

Cela échoue car GROUP BY nécessite que toutes les colonnes non agrégées de la liste SELECT soient également incluses dans la clause GROUP BY. Le caractère générique * sélectionne toutes les colonnes, ce qui rend la requête ambiguë puisque la base de données ne peut pas déterminer la valeur à renvoyer pour les colonnes non groupées au sein de chaque order_no groupe.

GROUP BYAvec les fonctions d'agrégation : la solution

Le problème est résolu lors de l'utilisation d'une fonction d'agrégation. Les fonctions d'agrégation fonctionnent sur l'ensemble du groupe, permettant à la requête de produire des résultats significatifs. Par exemple, calculer le prix total de chaque commande :

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

Cette requête renvoie avec succès la somme de order_price pour chaque order_no unique.

Fonctions agrégées et données groupées : dévoiler les attributs cachés

Les fonctions d'agrégation offrent un moyen d'accéder aux attributs au sein de chaque groupe. La fonction SUM, dans l'exemple précédent, calcule la somme pour chaque groupe order_no. Cela démontre la capacité des fonctions d'agrégation à « explorer » des groupes et à récupérer des informations résumées.

Conformité SQL standard : la GROUP BY règle

Le SQL standard (contrairement à l'approche plus indulgente de MySQL) exige que toutes les colonnes non agrégées de la liste SELECT apparaissent dans la clause GROUP BY. Ainsi, la requête suivante est valide :

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

Ceci est valide car order_no, la colonne non agrégée, est présente dans la clause GROUP BY. Le même principe s'applique aux requêtes comportant plusieurs colonnes groupées et fonctions d'agrégation :

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

Cette requête est valide car order_no et order_price sont inclus dans la clause 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!

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