Retour à la liste des articles Articles
8 minutes de lecture

Qui a le salaire le plus élevé, par département ? Utilisez SQL pour le savoir !

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 !