Retour à la liste des articles Articles
7 minutes de lecture

Différence entre GROUP BY et ORDER BY en termes simples

Pour quelqu'un qui apprend SQL, l'un des endroits les plus courants où il reste bloqué est l'apprentissage de la commande GROUP BY. GROUP BY et ORDER BY sont deux mots-clés importants en SQL que nous utilisons pour organiser les données. La différence entre GROUP BY et ORDER BY est que ORDER BY est plus simple que GROUP BY et est généralement introduit au début d'un cours SQL.

Parfois, les gens sont assez confus au sujet de ces deux concepts (SQL ORDER BY vs. GROUP BY), et la raison de cette confusion est un manque de compréhension des deux concepts. Bien qu'ils soient tous deux utilisés pour classer des données en fonction de leurs valeurs, leurs cas d'utilisation diffèrent grandement l'un de l'autre. Si nous apprenons ces deux concepts correctement, la confusion disparaîtra naturellement.

Dans cet article, j'ai utilisé une base de données intéressante publiée ici. L'ensemble de données contient plus de 2000 bières artisanales et 500 brasseries utilisées aux États-Unis. Les données sont incluses dans des fichiers CSV, que vous pouvez facilement importer dans n'importe laquelle de vos bases de données à l'aide d'un outil GUI. Un de mes collègues a montré comment le faire dans un exemple de données d'enquête de LearnSQL.

Cet ensemble de données comprend deux tables : beers et breweries. Voyons l'exemple de jeu de données de la table beers pour en avoir une meilleure idée.

tableau des bières

ORDER BY

Notre premier sujet est ORDER BY. Avant d'essayer de comprendre la différence entre GROUP BY et ORDER BY, voyons comment fonctionne la commande SELECT.

SELECT le nom, la ville et l'état de chaque enregistrement de la table. breweries tableau.

SELECT name, 
 city, 
 state 
FROM breweries

Lorsque vous exécutez la commande ci-dessus, vous obtenez quelque chose comme ce qui suit :

SÉLECTIONNER le nom, la ville et l'état dans la table des brasseries.

Vous pouvez constater que ces résultats ne sont pas ordonnés en fonction de leur nom. L'ordre par défaut d'une instruction SELECT est non déterministe, ce qui signifie que l'ordre des résultats peut varier à chaque fois que vous exécutez votre code.

Cependant, un ordre non déterministe n'est généralement pas ce que nous voulons. Par exemple, supposons que vous souhaitiez classer les résultats par ordre croissant ou décroissant de leur colonne state; dans ce cas, vous auriez besoin de la commande ORDER BY. Il vous suffit d'utiliser la clause ORDER BY comme ceci :

SELECT name, 
city, 
state 
FROM 	breweries 
ORDER BY state ASC
ORDER BY

De même, vous pouvez obtenir des résultats dans l'ordre décroissant de l'État.

SELECT name, 
city, 
state 
FROM breweries
ORDER BY state DESC
ordre décroissant

Vous pouvez voir les enregistrements qui sont organisés par ordre décroissant de l'état. L'ordre par défaut de la commande ORDER BY est l'ordre croissant. Donc, si vous n'avez pas utilisé ASC ou DESC, les résultats seront classés par ordre croissant.

Vous pouvez utiliser ORDER BY dans deux colonnes ou plus. Vérifiez la requête suivante :

SELECT name, 
 city, 
 state 
FROM breweries
ORDER BY state,
         city DESC

Cette requête classe d'abord les résultats dans l'ordre croissant de l'État, puis dans l'ordre décroissant de la ville.

ORDER BY

Maintenant, ce qui est intéressant, c'est que quelqu'un qui ne sait pas trop comment utiliser GROUP BY pourrait utiliser ORDER BY pour analyser des données. Par exemple, supposons que vous vouliez savoir combien de brasseries il y a dans une ville donnée state. Vous pouvez obtenir les résultats classés par État. Vous obtiendrez ainsi un résultat groupé à partir duquel vous pourrez compter manuellement le nombre de brasseries d'un state donné.

Par conséquent, une personne qui ne connaît pas bien GROUP BY pourrait penser que ORDER BY est un excellent moyen de regrouper les mêmes données. Cette idée n'est pas fausse. Si vous souhaitez afficher des données de manière agréablement groupée, ORDER BY est un bon choix.

GROUP BY n'est pas un moyen d'afficher des données en groupes, mais plutôt un moyen d'analyser des données en groupes. Pour mieux comprendre la comparaison entre SQL ORDER BY et GROUP BY, examinons GROUP BY plus en détail.

GROUP BY

Dans la plupart des textes, GROUP BY est défini comme un moyen d'agréger des enregistrements par les colonnes spécifiées, ce qui vous permet d'exécuter des fonctions d'agrégation sur des colonnes non groupées (telles que SUM, COUNT, AVG, etc.). En d'autres termes, l'objectif de la clause GROUP BY est de résumer des combinaisons uniques de valeurs de colonnes.

Quelques exemples permettront d'y voir plus clair :

Regroupons beers le tableau en fonction de la colonne style.

SELECT style 
FROM beers 
GROUP BY style

La requête SQL ci-dessus génère le résultat suivant

ORDER BY

Voyons ce qui s'est passé ici. Cette requête a retourné un résultat pour chaque valeur de style. Cela signifie que SQL crée d'abord des groupes à partir des mêmes valeurs style et renvoie une ligne représentant le groupe.

Et quelle est l'utilisation exacte de GROUP BY? Bien sûr, vous pouvez utiliser GROUP BY pour trouver des valeurs distinctes. Mais SQL a un mot-clé DISTINCT spécifiquement pour cela. La véritable importance de GROUP BY apparaît lorsque vous l'utilisez avec des fonctions d'agrégation comme SUM(), COUNT(). Pour mieux comprendre, exécutez la requête SQL suivante :

SELECT style, 
 COUNT(Name) 
FROM beers 
GROUP BY style

Elle générera le résultat suivant :

ORDER BY

Ici, SQL regroupe d'abord les résultats sur la base de la colonne style. Ensuite, il vérifie combien de noms se trouvent dans chaque groupe et renvoie les valeurs de style et le nombre de noms pour chaque style.

Si vous regardez attentivement, vous pouvez remarquer que les résultats sont déjà classés par ordre croissant. Cette situation fait parfois croire aux gens que GROUP BY trie les résultats. En réalité, il n'y a aucune garantie que GROUP BY affichera les résultats dans l'ordre croissant. Si vous avez besoin de résultats dans un ordre spécifique, vous devez le faire vous-même comme ci-dessous :

SELECT style, 
COUNT(Name) 
FROM beers 
GROUP BY style 
ORDER BY style

Par conséquent, GROUP BY fonctionne très bien avec ORDER BY.

Vous savez donc maintenant comment utiliser GROUP BY pour compter un ensemble de valeurs appartenant à un certain groupe. Je vais vous donner deux autres exemples concrets pour comprendre l'utilisation de GROUP BY.

  1. Pensez à une table d'employés dans laquelle vous stockez des informations sur les employés, telles que leur nom, leur fonction et leur salaire. Chaque employé appartient à un service différent, comme les finances, l'informatique ou le transport. Supposons maintenant que vous souhaitiez obtenir la somme des salaires versés aux employés en fonction de leur service. Vous devrez exécuter une commande SQL comme ci-dessous :

    SELECT department,
     SUM(salary) 
    FROM employee 
    GROUP BY department
    
  2. Supposons que vous ayez un site Web de commerce électronique qui vend plusieurs types de produits. Dans votre base de données, vous avez une table pour stocker les informations sur les stocks. Si vous voulez trouver le nombre de chaque type de produit, vous pouvez utiliser la fonction d'agrégation GROUP BY with COUNT :

    SELECT product_type, 
     COUNT(product_id) 
    FROM stock
    GROUP BY product_type
    

Poussons cette leçon un peu plus loin pour approfondir vos connaissances sur GROUP BY. Vous pouvez également regrouper les résultats en utilisant deux colonnes. Par exemple, regroupons le tableau beers tableau en fonction de style et brewery_id.

SELECT style,
 brewery_id,
 COUNT(Name) 
FROM beers 
GROUP BY style,
   brewery_id

Cette requête SQL va diviser les groupes style en utilisant brewery_id. Lorsque vous l'exécutez, vous obtenez le résultat suivant :

ORDER BY

Conclusion

Dans cet article, j'ai expliqué la différence entre ORDER BY et GROUP BY. ORDER BY trie les données en fonction des données d'une colonne. Bien sûr, à la suite du tri, les données ayant les mêmes valeurs seront rassemblées en un groupe, ce qui vous facilitera l'analyse manuelle ultérieure. Mais GROUP BY est la méthode SQL pour analyser des données similaires.

Il n'y a pas de réelle utilité de GROUP BY sans fonctions d'agrégation. Parfois, GROUP BY peut renvoyer des résultats dans un ordre trié, mais vous ne devez pas vous y fier. L'ordre dans lequel les résultats sont renvoyés n'est pas déterministe et dépend de la façon dont le moteur de la base de données exécute la requête.

Après avoir lu cet article, vous devriez être en mesure d'utiliser GROUP BY et ORDER BY avec plus de confiance. Si vous souhaitez affiner votre connaissance de SQL ORDER BY par rapport à GROUP BY, consultez ce jeu d'exercices - ilcontient une section spéciale consacrée à ce sujet.