Quelles requêtes SQL maîtriser pour les data analysts ?

Pour un data analyst, maîtriser les requêtes SQL essentielles permet d’extraire et transformer efficacement les données. Cet article décortique les commandes clés pour manipuler les bases et gagner en productivité — fini le bricolage, place à la précision et à l’efficacité.

3 principaux points à retenir.

  • SELECT, WHERE, ORDER BY : bases pour extraire et filtrer efficacement les données.
  • GROUP BY, HAVING : indispensables pour l’agrégation et le filtrage des groupes.
  • JOIN, UNION et fonctions avancées : cruciales pour combiner, transformer et enrichir vos datasets.

Comment extraire et filtrer des données en SQL

Pour sortir des données précises d’une base, la première commande que chaque data analyst doit maîtriser est le fameux SELECT. Cette instruction SQL vous permet de sélectionner les colonnes qui ont du poids pour votre analyse. Si, par exemple, vous voulez extraire les informations pertinentes de la table employees, vous pourriez taper :


SELECT name, age, salary FROM employees;

Cette requête va récupérer uniquement les colonnes name, age et salary, vous évitant ainsi de vous noyer sous les informations inutiles. Imaginez un instant un chef cuisinier qui trie ses ingrédients ; il ne va pas prendre tout le réfrigérateur, mais ce dont il a besoin pour son plat précis.

Maintenant, passer à une autre astuce : WHERE. C’est ici que les choses deviennent intéressantes. C’est grâce à cette clause que vous filtrez vos résultats, en ne gardant que les lignes qui respectent vos conditions. Par exemple, si vous souhaitez uniquement voir les employés du département de la Finance, votre requête ressemblera à ceci :

Comme on dit à Brive, un bon plan de marquage vaut mieux qu’un bon reporting ! Si besoin, consultez moi - faites appel à un super consultant en tracking client et server side.


SELECT * FROM employees WHERE department = 'Finance';

Mais attention, le filtrage devient encore plus puissant avec l’utilisation d’opérateurs logiques comme AND, OR, et NOT. Par exemple, si vous voulez voir les employés qui ont moins de 30 ans et un salaire supérieur à 50000, vous rédigez :


SELECT * FROM employees WHERE age < 30 AND salary > 50000;

À ce stade, n’oublions pas l’importance du tri. Grâce à la clause ORDER BY, vous pouvez organiser vos résultats pour voir, par exemple, qui sont les mieux payés :


SELECT name, salary FROM employees ORDER BY salary DESC;

Et là où ça devient vraiment pratique, c’est avec le LIMIT. Si Mike, un analyste, veut uniquement consulter les 5 meilleurs salaires, il peut ajouter cette clause à sa requête :


SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 5;

En orchestrant ainsi votre jeu de données avec SELECT, WHERE, ORDER BY, et LIMIT, vous transformez une mer de données en un océan de clarté. Ne laissez pas des volumes d’informations vous submerger ; utilisez SQL intelligemment pour extraire exactement ce dont vous avez besoin.

Comment regrouper et résumer les données efficacement

Le mot d’ordre pour chaque analyste de données est : transformer des montagnes de données brutes en informations exploitables. Comment fait-on ça de manière efficace ? C’est ici que GROUP BY entre en scène. Cette commande permet de grouper des enregistrements en fonction d’une ou plusieurs colonnes. Par exemple, supponons que nous voulons analyser les salaires des employés par département. Avec GROUP BY, nous avons la possibilité de voir la moyenne, le maximum ou le minimum de salaires dans chacun de ces départements.

Prenons un exemple concret :

SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department;

Cette requête génère un tableau avec chaque département et le salaire moyen de ses employés. Plutôt utile, n’est-ce pas? C’est comme si vous étiez un chef cuisinier qui, au lieu de poser tous les ingrédients sur la table, les répartit par catégorie pour concocter une recette parfaitement équilibrée.

Les fonctions d’agrégation comme COUNT(), AVG(), SUM(), MAX(), et MIN() viennent compléter cet outil magique. COUNT() par exemple, vous permettra de savoir combien d’employés il y a dans chaque département :

SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department;

Mais que faire si, une fois votre équipe regroupée, vous avez des critères supplémentaires pour trier vos résultats ? C’est là qu’intervient la clause HAVING. Contrairement à WHERE, qui filtre les lignes avant le groupement, HAVING agit sur les résultats déjà agrégés. Pour illustrer, disons que nous ne voulons voir que les départements avec plus de 10 employés :

SELECT department, COUNT(*) AS num_employees, AVG(salary) AS average_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

Cette requête ne renverra que les départements qui ont une équipe assez large pour être significatifs. En filtrant ainsi, vous vous assurez de prendre des décisions basées sur des données robustes et significatives.

Pour plus d’informations sur les bases de SQL et comment maîtriser ces techniques, n’hésitez pas à consulter ce lien utile : Maitriser SQL pour l’ingénierie des données.

Quelles techniques pour combiner et transformer les tables

Les clauses JOIN en SQL sont essentielles pour relier plusieurs tables à travers une clé commune, permettant ainsi d’obtenir un ensemble d’informations enrichi. Imaginez que nous ayons deux tables, employees et departments. La première contient les employés et la seconde les départements auxquels ils appartiennent. Supposons que chaque employé a un identifiant de département correspondant à une clé de la table département. En utilisant un JOIN, nous pouvons combiner ces données. Voici un exemple simple :

SELECT e.name, d.name AS department
FROM employees e
JOIN departments d ON e.dept_id = d.id;

Ce code relie les noms des employés avec les départements en utilisant la clé commune dept_id.

Il existe plusieurs types de JOIN, chacun ayant ses spécificités :

  • INNER JOIN : renvoie uniquement les enregistrements qui ont des correspondances dans les deux tables.
  • LEFT JOIN : renvoie tous les enregistrements de la table de gauche (ici employees) et les correspondances de la table de droite (departments). Si aucune correspondance n’est trouvée, NULL est retourné pour les colonnes de droite.
  • RIGHT JOIN : l’inverse du LEFT JOIN, il retourne tous les enregistrements de la table de droite, et NULL pour les colonnes de la table de gauche lorsqu’il n’y a pas de correspondance.

En matière de fusion de résultats, les commandes UNION et UNION ALL sont très pratiques. UNION combine les résultats de plusieurs requêtes, en éliminant les doublons, tandis qu’UNION ALL les garde :

SELECT name FROM employees
UNION
SELECT name FROM customers;

Pour aller plus loin dans la manipulation des données, on utilise des fonctions comme CONCAT, CASE et COALESCE. Par exemple, si vous souhaitez créer un full name à partir des colonnes first_name et last_name, voici comment :

SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;

La CASE permet de catégoriser des enregistrements de manière conditionnelle :

SELECT name,
       CASE 
           WHEN age < 30 THEN 'Junior'
           WHEN age BETWEEN 30 AND 50 THEN 'Mid-level'
           ELSE 'Senior'
       END AS experience_level
FROM employees;

Enfin, pour manipuler des dates, la fonction DATEDIFF est un allié précieux :

SELECT name, hire_date,
       DATEDIFF(CURRENT_DATE, hire_date) AS days_at_company
FROM employees;

Ces techniques offrent une flexibilité d'analyse sans précédent. Pour approfondir vos connaissances, n'hésitez pas à consulter cet article sur des questions d'entretien en SQL, qui pourra vous aider à peaufiner vos compétences.

Quand et pourquoi utiliser subqueries et window functions

Les subqueries, c'est-à-dire les requêtes imbriquées, sont un vrai bijou quand il s'agit de traitements complexes. Pourquoi ? Parce qu'elles permettent d'optimiser vos sélections en déléguant certaines parties du travail à des requêtes internes. Par exemple, si vous voulez comparer chaque salaire à la moyenne des salaires au sein de votre entreprise, une subquery est votre meilleur allié. Elle va tourner en arrière-plan et vous fournir cette moyenne sans que vous ayez à manipuler tout votre dataset à la main.


SELECT name, salary 
FROM employees 
WHERE salary > (SELECT AVG(salary) FROM employees);

Cette petite merveille de requête vous donne directement les employés qui surpassent la moyenne, en un clin d'œil. Plutôt pratique, n'est-ce pas ?

Une autre pépite que les data analysts doivent maîtriser, ce sont les window functions. Imaginez que vous souhaitez non seulement connaître les salaires, mais aussi classer les employés selon leur rémunération, le tout sans perdre de vue les détails de chaque ligne. C'est précisément ce que font des fonctions comme RANK ou ROW_NUMBER. Ces fonctions opèrent sur un ensemble de lignes tout en vous permettant de voir chaque ligne individuellement.


SELECT name, salary, RANK() OVER (ORDER BY salary DESC) AS salary_rank 
FROM employees;

Avec cette requête, vous obtenez un classement des employés en fonction de leur salaire, sans avoir à modifier la structure de vos données. Vous pouvez même calculer des totaux cumulés, rendant vos analyses encore plus puissantes et intelligentes.

Alors, quand privilégier les subqueries et les window functions ? Ces techniques avancées doivent être employées lorsque vous sentez que vos requêtes deviennent trop lourdes ou que certaines agrégations apparaissent impossibles avec des méthodes traditionnelles. En optimisant vos analyses, vous évitez de plonger dans un kaléidoscope de requêtes compliquées. Pour plus d'éclaircissements, vous pouvez consulter cette discussion sur Reddit.

Maîtriser ces requêtes SQL, par où commencer concrètement ?

Maîtriser ces commandes SQL, c’est garantir une extraction pertinente et une transformation rationnelle des données, indispensables au travail du data analyst. Des requêtes basiques aux fonctions avancées, elles forment l’ossature d’une analyse rigoureuse et scalable. En les intégrant à vos compétences, vous gagnez en autonomie et en vitesse d’exécution, un avantage decisif dans le traitement de données complexes. Apprendre ces techniques, c’est donc investir directement dans la qualité et la fiabilité des décisions appuyées sur vos analyses.

FAQ

Quelles sont les requêtes SQL de base pour un data analyst ?

Les commandes SELECT, WHERE et ORDER BY sont fondamentales pour extraire et trier des données. Elles permettent de sélectionner les colonnes, filtrer les résultats selon des conditions, et organiser les données par ordre croissant ou décroissant.

Quelle différence entre WHERE et HAVING ?

WHERE filtre les lignes avant regroupement, tandis que HAVING s'applique aux groupes après une agrégation (comme COUNT ou SUM). HAVING sert à filtrer les résultats qui dépendent d'une fonction d'agrégat.

Quand utiliser JOIN ou UNION en SQL ?

JOIN combine des tables ligne par ligne selon une clé commune, tandis que UNION assemble les résultats de plusieurs requêtes en une liste unique. JOIN sert à enrichir les données, UNION à concaténer des données similaires.

Quels avantages apportent les fonctions fenêtres (window functions) ?

Elles calculent des valeurs sur un ensemble de lignes sans fusionner les résultats, permettant des analyses comme le classement, la somme cumulée ou la comparaison entre lignes, tout en gardant le détail des données.

Comment gérer les valeurs manquantes en SQL ?

La fonction COALESCE permet de remplacer les valeurs NULL par une valeur par défaut, facilitant la lecture et l’analyse des données en évitant les trous dans les résultats.

 

 

A propos de l'auteur

Franck Scandolera, fort de plus de 10 ans d'expérience en data engineering et analytics, accompagne les entreprises à exploiter pleinement leurs données. En tant que formateur indépendant et consultant expert, il maîtrise SQL, BigQuery, et les architectures data modernes. Ses interventions allient rigueur technique et pragmatisme métier, avec un objectif clair : rendre la donnée accessible et utile.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut