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 ?

Jan 13, 2025 am 07:10 AM

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 :

SELECT *
FROM order_details
GROUP BY order_no
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 :

SELECT SUM(order_price)
FROM order_details
GROUP BY order_no
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 :

SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no
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 :

SELECT order_no, order_price, MAX(order_item)
FROM order_details
GROUP BY order_no, order_price
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!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Réduisez l'utilisation de la mémoire MySQL dans Docker Réduisez l'utilisation de la mémoire MySQL dans Docker Mar 04, 2025 pm 03:52 PM

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

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Mar 19, 2025 pm 03:51 PM

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 Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Mar 04, 2025 pm 04:01 PM

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

Qu'est-ce que Sqlite? Aperçu complet Qu'est-ce que Sqlite? Aperçu complet Mar 04, 2025 pm 03:55 PM

Qu'est-ce que Sqlite? Aperçu complet

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Mar 04, 2025 pm 03:54 PM

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

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Mar 04, 2025 pm 03:49 PM

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 sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)? Mar 18, 2025 pm 12:00 PM

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? Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Mar 18, 2025 pm 12:01 PM

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

See all articles