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
Libérer: 2025-01-13 07:10:45
original
616 Les gens l'ont consulté

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

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

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

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

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!

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