


Comment la clause GROUP BY de SQL fonctionne-t-elle avec et sans fonctions d'agrégation ?
Jan 13, 2025 am 07:10 AMClause 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 BY
Sans fonctions agrégées : le piège
L'utilisation de GROUP BY
sans fonction d'agrégation entraîne une erreur. Prenons cet exemple :
SELECT * FROM order_details GROUP BY order_no
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 BY
Avec 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 :
SELECT SUM(order_price) FROM order_details GROUP BY order_no
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 :
SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no
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 :
SELECT order_no, order_price, MAX(order_item) FROM order_details GROUP BY order_no, order_price
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
