4th Jul 2022 8 minutes de lecture Qui a le salaire le plus élevé, par département ? Utilisez SQL pour le savoir ! Himanshu Kathuria sql apprendre sql group by Table des matières L'échantillon de données Qu'est-ce que l'agrégation ? La clause SQL GROUP BY Exemple de structure d'une requête avec une clause GROUP BY Colonnes SELECT et fonction d'agrégation FROM <table(s)> et WHERE <conditions>. Liste des colonnes à regrouper avec un GROUP BY Conditions sur la fonction d'agrégation à l'aide d'une clause HAVING Triage avec une clause ORDER BY Prêt à écrire votre requête SQL GROUP BY ? Cetarticle montre comment obtenir le salaire total par département pour une organisation, en utilisant la fonctionnalité GROUP BY de SQL. Nous expliquons en détail la clause SQL GROUP BY ainsi que le filtrage conditionnel à l'aide d'une clause HAVING. La compréhension de la masse salariale d'une organisation est l'un des points de départ courants pour les chefs d'entreprise. Cela les aide à voir qui, dans l'organisation, a le coût salarial total le plus élevé, département par département. Il est également possible de voir la distribution des paiements salariaux pour avoir une meilleure idée de la répartition des coûts. Dans cet article, je vais illustrer comment vous pouvez utiliser le SQL GROUP BY pour y parvenir. Si vous êtes un professionnel qui peut utiliser une telle analyse, ou si vous êtes un étudiant qui essaie de comprendre la fonctionnalité SQL GROUP BY à travers un cas d'utilisation pratique, lisez la suite ! Avant de résoudre le problème, jetons un coup d'œil à l'ensemble de données que nous allons utiliser. L'échantillon de données employees: employeenumberlastnamelevelannual_salarydepartment 1056Patterson1010000Finance 1076Firrel57000Marketing 1088Patterson1012500Finance 1102Bondur25000Human Resources 1143Bow25000Sales 1165Jennings25000Sales 1166Thompson1010000Marketing Le tableau ci-dessus est le suivant employees avec cinq colonnes, avec des noms de colonnes explicites. employeenumber: Identifiant unique de l'employé . lastname: Le nom de famille de l'employé. level: Le niveau de l'employé dans la hiérarchie. annual_salary: La rémunération annuelle de l'employé. department: Le département de l'employé. Supposons maintenant que vous souhaitiez trouver le salaire annuel total versé aux employés appartenant à différents départements, comme les finances, le marketing, les ressources humaines et les ventes. Ce type d'opération sur les données est connu sous le nom d'agrégation. Qu'est-ce que l'agrégation ? Comme il est difficile d'analyser chaque ligne séparément, surtout avec des ensembles de données volumineux, il est souvent utile de regrouper des données similaires afin de comprendre certaines statistiques pour chacun de ces groupes. C'est ce qu'on appelle l'agrégation. Vous pouvez par exemple regrouper différents segments de clients (agrégation par segment de clients), calculer la taille moyenne de leur commande, calculer le total des ventes par région (agrégation par zone géographique) ou vérifier le nombre total d'articles de différents vendeurs sur un site Web (agrégation par vendeur). Ce sont tous des exemples d'agrégation de données qui peuvent aider à analyser les données et à générer des informations. Donc, ici, nous voulons agréger les employés par département, puis calculer le salaire total (c'est-à-dire la somme des salaires) de tous les employés appartenant à ce département. Vous pensez peut-être que vous pouvez facilement faire cela pour le tableau ci-dessus en additionnant les salaires à la main. Mais vous aurez sûrement besoin d'un moyen plus rapide si vous avez des milliers d'employés ! C'est là que la clause SQL GROUP BY peut vous aider. La clause SQL GROUP BY La clause SQL GROUP BY vous aide à regrouper les données en groupes, puis à calculer les statistiques correspondantes pour ce groupe. Dans notre cas, vous pouvez utiliser la requête suivante pour calculer le salaire total par département. Les commentaires expliquent brièvement la fonction de chaque construction dans la requête. Requête : SELECT department, -- column to be returned SUM(annual_salary) -- aggregate function FROM employees -- table name GROUP BY department; -- column to use for grouping Sortie : departmentSUM(annual_salary) Finance22500 Marketing17000 Sales10000 Human Resources5000 Pour vous aider à mieux comprendre, je vais plonger un peu plus dans la structure de cette requête et expliquer chaque clause ou mot-clé utilisé. Exemple de structure d'une requête avec une clause GROUP BY Si je devais dessiner un squelette ou un exemple de structure d'une requête SQL utilisant une clause GROUP BY, cela ressemblerait à ceci. Vous n'utiliserez peut-être pas toutes ces constructions tout le temps, mais il est utile de les comprendre. Exemple de structure : SELECT <columns>, <aggregate function> FROM <table name> WHERE <conditions> GROUP BY <columns> HAVING <aggregate condition> ORDER BY <columns> Dans notre requête visant à trouver le salaire total par département, nous avons utilisé uniquement les clauses SELECT, FROM et GROUP BY. Voyons comment vous pouvez utiliser chacune de ces constructions. Colonnes SELECT et fonction d'agrégation Dans cette partie de la requête, vous spécifiez les colonnes à agréger et à renvoyer. Ainsi, pour le salaire total par département, le département est l'une des colonnes à renvoyer. Vous choisissez également la fonction d'agrégation. La fonction d'agrégation est la métrique ou la statistique que vous voulez calculer pour la colonne groupée. Dans notre cas, SUM() est la fonction d'agrégation. SQL fournit également d'autres fonctions d'agrégation intégrées utiles. Consultez ce tableau pour connaître les différentes fonctions d'agrégation et un exemple d'utilisation pour chacune d'entre elles. Aggregate FunctionExample Use Case SUM()Find the total salary by department COUNT()Find the number of employees in each department MAX()Find the highest salary paid in each department MIN()Find the lowest salary paid in each department AVG()Find the average salary for each department Pour modifier la statistique, il vous suffit d'utiliser la fonction appropriée. Par exemple, si vous souhaitez calculer le salaire moyen à la place, vous pouvez utiliser : Requête : SELECT department, AVG(annual_salary) FROM employees GROUP BY department; Sortie : departmentAVG(annual_salary) Finance11250 Marketing8500 Sales5000 Human Resources5000 Vous pouvez également utiliser plusieurs fonctions d'agrégation ensemble. Par exemple : Requête : SELECT department, AVG(annual_salary), SUM(annual_salary) FROM employees GROUP BY department; Sortie : departmentAVG(annual_salary)SUM(annual_salary) Finance1125022500 Marketing850017000 Sales500010000 Human Resource50005000 FROM <table(s)> et WHERE <conditions>. Dans cette section, vous indiquez la ou les tables dont vous souhaitez obtenir les colonnes et les conditions que vous souhaitez éventuellement appliquer aux colonnes sélectionnées. Disons que vous souhaitez obtenir les données de deux départements seulement - marketing et ventes - à partir du tableau. employees tableau. Requête : SELECT department, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’) GROUP BY department; Sortie : departmentSUM(annual_salary) Marketing17000 Sales10000 Liste des colonnes à regrouper avec un GROUP BY Dans cette partie de la requête, vous spécifiez les colonnes que vous souhaitez utiliser pour regrouper les données. Nous avons déjà vu le regroupement par département. Une chose à laquelle il faut faire attention ici : si vous utilisez plusieurs colonnes dans votre déclaration SELECT, vous devez toutes les inclure ici dans la clause GROUP BY, à l'exception de la ou des colonnes utilisées par la ou les fonctions d'agrégation. Si vous ne le faites pas, vous obtiendrez probablement une erreur. Consultez cet article pour connaître les erreurs courantes avec GROUP BY et savoir comment les éviter. Ainsi, par exemple, disons que vous voulez SELECT et GROUP BY à la fois le département et le niveau. La requête ressemblerait à ceci. Requête : SELECT department, level, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’) GROUP BY department, level; Sortie : departmentlevelSUM(annual_salary) Marketing57000 Marketing1010000 Sales210000 Conditions sur la fonction d'agrégation à l'aide d'une clause HAVING Vous pouvez choisir d'affiner et de filtrer le résultat d'une requête avec une fonction d'agrégation en utilisant une clause HAVING. Une clause HAVING évalue la ou les conditions sur la sortie d'une fonction d'agrégation et renvoie les lignes qui répondent à ces critères. Ainsi, si vous voulez trouver tous les départements dont le salaire moyen est supérieur à 7000, vous pouvez utiliser la requête suivante. Requête : SELECT department, SUM(annual_salary) FROM employees GROUP BY department HAVING AVG(annual_salary)>7000; Sortie : departmentSUM(annual_salary) Finance22500 Marketing17000 Remarque: ne confondez pas laclause WHERE avec la clause HAVING. Alors qu'une clause WHERE filtre les enregistrements des tables, une clause HAVING filtre les groupes. Triage avec une clause ORDER BY Enfin, vous pouvez trier vos résultats à l'aide d'une clause ORDER BY. Elle peut être utilisée pour trier les résultats par ordre croissant ou décroissant. Pour trier les départements par ordre alphabétique, vous pouvez utiliser la requête suivante. Requête : SELECT department, level, SUM(annual_salary) FROM employees WHERE department in (‘Marketing’,’Sales’,’Human Resources’) GROUP BY department,level ORDER BY department asc; -- asc is used for ascending, desc for descending Sortie : departmentlevelSUM(annual_salary) Human Resource25000 Marketing57000 Marketing1010000 Sales210000 Pour plus d'exemples et de cas d'utilisation de la clause GROUP BY, consultez cet article. Prêt à écrire votre requête SQL GROUP BY ? Si vous avez lu l'article jusqu'ici, je suis sûr que vous êtes prêt à écrire votre requête SQL GROUP BY pour obtenir le résultat souhaité. J'ai utilisé de nombreux exemples de requêtes dans cet article pour vous familiariser avec le processus d'écriture de requêtes. Croyez-moi, la pratique est le meilleur moyen de s'améliorer dans la rédaction de requêtes. Pour pratiquer des requêtes comme celles-ci et d'autres encore, vous pouvez consulter la piste La pratique du SQL de LearnSQL. Il s'agit d'un moyen complet d'affiner vos compétences. SQL est un outil très puissant, non seulement pour l'agrégation de données, mais aussi pour de nombreux autres cas d'utilisation qui nécessitent le traitement et la manipulation de données. En fait, il s'agit d'une compétence indispensable non seulement pour les analystes de données, mais aussi pour toute personne qui aspire à travailler dans un environnement où les décisions sont prises sur la base de données. Si vous êtes novice en SQL et souhaitez en savoir plus sur la rédaction de requêtes SQL, je vous recommande vivement le cours de LearnSQL sur la rédaction de requêtes de base. Il vous donnera une base solide pour l'analyse des données avec SQL et améliorera votre carrière. Alors, qu'attendez-vous ? Commencez dès aujourd'hui ! Tags: sql apprendre sql group by