Retour à la liste des articles Articles
23 minutes de lecture

Questions d'entretien SQL pour les analystes de données

Table des matières

Vous avez un entretien pour un poste d'analyste de données et SQL est l'une des compétences qui sera testée. Ces questions SQL pour les analystes de données sont spécialement conçues pour vous !

SQL est une compétence indispensable dans la boîte à outils de tout analyste de données. Il simplifie l'extraction et la manipulation des données, permettant aux analystes de convertir les données brutes en informations exploitables. Il permet aux analystes d'effectuer des analyses ad hoc, ce qui accélère les processus de prise de décision au sein de l'organisation. Il encourage également la collaboration entre les analystes de données et les administrateurs de bases de données, ce qui se traduit par des opérations de données plus fluides.

Si vous ne savez pas où commencer votre voyage SQL, ne cherchez pas plus loin que notre cours SQL pour l'analyse de données. Ce cours complet couvre tous les aspects de l'analyse des données, y compris la récupération des données et la génération de rapports.

Cependant, vous êtes probablement ici pour vous préparer à votre entretien d'analyste de données. Alors, sans plus attendre, entrons dans le vif du sujet.

Comment se préparer à un entretien avec un analyste de données ?

Pour réussir un entretien avec un analyste de données, il faut une combinaison stratégique d'expertise technique et de préparation ciblée. Voici quelques conseils et suggestions pratiques qui vous aideront à vous démarquer :

  • Réviser les concepts fondamentaux de SQL. Assurez-vous de bien comprendre les concepts fondamentaux du langage SQL, à savoir l'interrogation, le filtrage, la jointure et l'agrégation de données. Envisagez de vous inscrire à notre cours SQL pour les débutants , qui est conçu pour renforcer vos connaissances du langage SQL de base.
  • Apprendre les fonctions SQL standard. Améliorez votre compréhension des fonctions SQL standard, y compris les fonctions numériques, texte et date/heure. Apprenez à gérer efficacement les valeurs NULL et à utiliser les fonctions SQL pour écrire des requêtes plus efficaces.
  • Pratiquer le reporting SQL. Commencez par des rapports de base utilisant GROUP BY, ORDER BY et HAVING. Vous pourrez ensuite passer à des rapports intermédiaires et avancés utilisant des sous-requêtes, des fonctions de fenêtre et des expressions de table communes (CTE).
  • Faites une évaluation de vos compétences. Envisagez de passer une évaluation SQL pour évaluer votre niveau de compétence. Notre évaluation des compétences SQL comprend 18 tâches interactives en ligne qui couvrent six domaines de compétences SQL.
  • Utiliser les ressources d'apprentissage. Utilisez des cours et des tutoriels en ligne pour améliorer vos compétences en SQL. Nos cours de SQL comprennent des supports d'apprentissage complets et des exercices pratiques conçus pour vous aider à améliorer vos analyses de données et vos requêtes SQL. Si vous préférez les livres, consultez notre liste des meilleurs livres SQL pour l'analyse de données.

Questions d'entretien SQL de base

Maintenant que nous avons discuté de l'importance d'apprendre SQL pour l'analyse de données, examinons quelques questions d'entretien SQL réelles adaptées à différents niveaux de compétence - basique, intermédiaire et avancé. Gardez notre aide-mémoire SQL pour l'analyse de données à portée de main pour vous aider à relever les défis qui vous attendent.

Question 1 : Qu'est-ce que SQL ?

SQL (Structured Query Language) est un langage de programmation standard permettant de gérer et de communiquer avec des bases de données relationnelles. Il permet aux utilisateurs d'interroger les données, d'insérer, de mettre à jour et de supprimer des enregistrements, de créer et de modifier des schémas de base de données et de gérer les autorisations d'accès.

Question 2 : Énumérez les éléments de base d'une requête SQL.

Une requête SQL contient généralement une :

  • SELECT une instruction qui extrait des données d'une ou de plusieurs tables.
  • FROM Une clause WHERE qui spécifie la ou les tables où se trouvent les données.
  • Une clause WHERE (facultative) qui filtre les résultats en fonction de critères spécifiques.
  • Une clause GROUP BY (facultative) qui regroupe les résultats par colonne(s)
  • La clause HAVING (facultative) filtre les résultats groupés.
  • La clause ORDER BY (facultative) qui trie les résultats par ordre croissant (ou décroissant).

Question 3 : Comment sélectionner toutes les données d'un tableau ?

Pour extraire toutes les données d'un tableau, utilisez la commande :

SELECT * 
FROM employees;

Cette requête récupère toutes les lignes de toutes les colonnes de la table employés:

  • SELECT *: Sélectionne toutes les colonnes de la table spécifiée ; l'astérisque (*) représente toutes les colonnes d'une table.
  • FROM employees: Spécifie la table à partir de laquelle les données seront extraites.

Question 4 : Comment sélectionner certaines colonnes d'une table ?

Pour extraire des colonnes spécifiques d'une table, vous devez énumérer les noms des colonnes souhaitées dans l'instruction SELECT:

SELECT first_name, last_name, department 
FROM employees;

Cette requête récupère uniquement les données des colonnes spécifiées, ce qui permet d'obtenir une vue ciblée des informations pertinentes de la table. employees table.

  • SELECT first_name, last_name, department: Cette requête renvoie uniquement les données des colonnes first_name, last_name, et department
  • FROM employees: Spécifie la table dont les données seront extraites.

Nous pouvons également nommer les colonnes sélectionnées à l'aide de AS:

SELECT first_name, 
last_name AS surname, 
department 
FROM employees;

Dans les résultats de la requête, la colonne last_name sera affichée comme nom de famille. Vous pouvez utiliser cette fonction pour différencier deux colonnes ayant des noms similaires ou pour ajouter plus de contexte à une colonne. Par exemple, renommer la colonne number en part_id_number permet aux lecteurs d'identifier rapidement le type de données stockées dans cette colonne.

Question 5 : Expliquez la syntaxe de la clause WHERE.

La clause WHERE permet de filtrer les lignes en fonction de conditions spécifiques. Voici un exemple de sa syntaxe :

SELECT first_name, last_name
FROM employees
WHERE department = 'Sales';

Dans cette requête, WHERE limite les résultats aux données relatives aux employés du département des ventes.

  • SELECT first_name, last_name: Spécifie les colonnes à partir desquelles les données doivent être extraites.
  • FROM employees: Spécifie la table à partir de laquelle les données seront extraites.
  • WHERE department = 'Sales': Limite les résultats aux employés du département des ventes.

WHERE Les filtres peuvent être appliqués à différents types de données. Pour filtrer des nombres ou des dates, vous pouvez utiliser des comparaisons directes ou des opérateurs tels que <,<=,>,>=, ou =.

SELECT first_name, last_name
FROM employees
WHERE salary > 50000;

Pour filtrer les valeurs NULL, vous pouvez utiliser les opérateurs IS NULL ou IS NOT NULL:

SELECT * 
FROM employees 
WHERE manager_id IS NULL;

Question 6 : Comment filtrer les résultats d'une requête en fonction de plusieurs conditions ?

Pour filtrer les résultats en fonction de plusieurs conditions, des opérateurs logiques tels que AND, OR et NOT sont utilisés dans la clause WHERE.

  • L'opérateur AND renvoie les lignes qui remplissent toutes les conditions spécifiées.
  • L'opérateur OR renvoie les lignes qui remplissent au moins une des conditions spécifiées.
  • L'opérateur NOT renvoie les lignes qui ne remplissent pas la ou les conditions.

Prenons l'exemple suivant :

SELECT first_name, last_name
FROM employees
WHERE department = 'Sales' AND salary > 50000;

Cette requête ne renvoie que les employés qui travaillent dans le secteur des ventes et dont le salaire est supérieur à 50 000 $. Si l'employé travaille dans un autre service ou s'il travaille dans les ventes et gagne moins de 50 000 $, il n'apparaîtra pas dans les résultats.

  • SELECT first_name, last_name: Détermine les colonnes à partir desquelles les données doivent être extraites.
  • FROM employees: Spécifie la table à partir de laquelle les données seront extraites.
  • WHERE department = 'Sales' AND salary > 50000: Filtre les résultats pour inclure uniquement les employés du département des ventes ayant un salaire plus élevé.

Vous pouvez combiner plusieurs conditions à l'aide de parenthèses :

SELECT first_name, last_name
FROM employees
WHERE (department = 'Sales' AND salary > 50000) 
  OR manager_id IS NULL;

Dans cette requête, seuls les employés qui ne dépendent pas d'un responsable (c'est-à-dire dont l'ID de responsable est NULL) ou qui travaillent dans le service des ventes et gagnent plus de 50 000 $ seront inclus dans les résultats.

Question 7 : Comment filtrer les résultats pour une valeur textuelle donnée ?

Pour filtrer les résultats sur la base d'une valeur spécifique dans une colonne de texte, utilisez l'opérateur LIKE . Vous aurez également besoin des symboles de filtrage % (correspond à zéro ou plusieurs caractères) et/ou _ (correspond à n'importe quel caractère). Prenons l'exemple suivant :

SELECT product_name, description
FROM products
WHERE description LIKE '%apple%';

Cette requête illustre l'utilisation de LIKE avec la recherche de motifs :

  • SELECT product_name, descriptionL'opérateur LIKE : spécifie les colonnes à partir desquelles les données doivent être extraites.
  • FROM products: Spécifie la table à partir de laquelle les données seront extraites.
  • WHERE description IS LIKE '%apple%': Filtre les résultats pour n'afficher que les produits dont la description contient le mot "apple".

Voici un autre exemple :

SELECT * 
FROM employees 
WHERE first_name LIKE 'Mar_a';

Imaginez que vous recherchiez tous les employés qui s'appellent María ou Maria. Cette requête renverra tous les employés dont le prénom commence par "Mar", suivi d'un caractère quelconque à la place de "i", puis d'un "a". Ce modèle peut être utilisé pour faire correspondre "Maria" et "María" dans une base de données où le nom peut ne pas avoir d'accent sur le "i" (il renverrait également "Marta", "Marla", "Marja" et tout autre nom correspondant au modèle).

Question 8 : Comment mettre à jour les lignes d'une base de données ?

Pour mettre à jour les lignes existantes d'une table de base de données, utilisez l'instruction UPDATE:

UPDATE employees
SET salary = 60000, department = 'Marketing'
WHERE employee_id = 101;

Cette requête montre comment mettre à jour les colonnes existantes avec de nouvelles valeurs pour les lignes qui satisfont à la condition spécifiée.

  • UPDATE employees: Spécifie la table qui sera mise à jour.
  • SET salary = 60000, department = 'Marketing': Spécifie les colonnes et leurs nouvelles valeurs (mises à jour).
  • WHERE employee_id = 101: Définit les lignes qui seront mises à jour - dans ce cas, la ligne où l'ID de l'employé est 101. Vous pouvez également utiliser AND, OR, NOT, le filtrage des nombres, etc. pour spécifier des conditions de mise à jour plus complexes.

Question 9 : Comment supprimer des lignes d'une base de données ?

Pour supprimer des lignes d'une table de base de données, utilisez l'instruction DELETE FROM, suivie du nom de la table et de la condition indiquant les lignes à supprimer :

DELETE FROM employees
WHERE department = 'Human Resources';

Cette requête montre comment supprimer des lignes d'une table de base de données en fonction d'une condition spécifiée :

  • DELETE FROM employees: Cette requête montre comment supprimer des lignes d'une table de base de données en fonction d'une condition spécifiée : : Indique la table dont les lignes seront supprimées.
  • WHERE department = 'Human Resources': Indique la condition qui détermine quelles lignes doivent être supprimées - dans ce cas, tous les employés du département des ressources humaines. Vous pouvez spécifier des conditions de suppression à l'aide de la méthode standard WHERE

Question 10 : Comment trier les résultats d'une requête SQL ?

Utilisez la clause ORDER BY, suivie du nom de la ou des colonnes par lesquelles vous souhaitez trier les résultats :

SELECT product_name, price
FROM products
ORDER BY price DESC;

Cette requête montre comment trier les résultats en fonction d'une colonne spécifiée, ce qui permet de présenter les données dans l'ordre souhaité.

  • SELECT product_name, price: Détermine les colonnes à partir desquelles les données seront extraites.
  • FROM products: Définit la table dans laquelle résident ces données.
  • ORDER BY price DESC: Trie les résultats (du plus élevé au plus bas, alias ordre décroissant) par price L'ordre de tri par défaut de SQL est ascendant, les valeurs textuelles étant triées de A à Z et les valeurs numériques de la plus basse à la plus haute. Si DESC n'est pas spécifié, le tri sera effectué dans l'ordre croissant.

Questions SQL intermédiaires

Question 11 : Comment combiner des données provenant de plusieurs tables dans une seule requête ?

Les requêtes SQL utilisent les clauses JOIN pour combiner les résultats de plusieurs tables. Les clauses JOINvous permettent d'extraire des données de tables liées (c'est-à-dire des tables ayant une ou plusieurs colonnes en commun) sur la base de critères spécifiques. Voici un exemple de JOIN:

SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers 
ON orders.customer_id = customers.customer_id;

Cette requête récupère l'identifiant de la commande et le nom du client dans les tables orders et customers . Elle joint les informations lorsque les enregistrements des deux tables contiennent un identifiant de client correspondant. Pour plus d'informations sur le fonctionnement de JOIN, consultez le Guide illustré de la jointure interne SQL. Vous trouverez d'autres exemples de questions d'entretien sur JOIN dans The Top 10 SQL JOIN Interview Questions and How to Answer Them.

Question 12 : Décrivez les types de JOIN.

Les types de JOIN comprennent plusieurs variantes, chacune servant un objectif spécifique en combinant les résultats de plusieurs tables :

  • INNER JOIN: JOIN : ne récupère que les enregistrements pour lesquels les deux tables ont des valeurs correspondantes en fonction de la condition spécifiée.
  • LEFT JOIN: renvoie tous les enregistrements de la table de gauche et tous les enregistrements correspondants de la table de droite. Si aucune correspondance n'est trouvée, les valeurs NULL sont renvoyées pour les colonnes de la table de droite.
  • RIGHT JOIN: renvoie tous les enregistrements de la table de droite et tous les enregistrements correspondants de la table de gauche. Si aucune correspondance n'est trouvée, les valeurs NULL sont renvoyées pour les colonnes de la table de gauche.
  • FULL JOIN : renvoie tous les enregistrements lorsqu'il existe une correspondance dans les tables de gauche ou de droite. Si aucune correspondance n'est trouvée, les lignes qui ne correspondent pas sont renvoyées avec NULLs.
  • CROSS JOIN: renvoie le produit cartésien des deux tables, c'est-à-dire toutes les combinaisons possibles de lignes.

Bien qu'un self-JOIN utilise la même syntaxe que les autres JOINs, il s'agit en fait de joindre une table à elle-même. Cela permet d'effectuer des comparaisons entre les lignes d'une même table.

Question 13 : Décrivez le LEFT JOIN et la différence entre le LEFT JOIN et l'INNER JOIN.

LEFT JOIN Le LEFT JOIN est un type de OUTER JOIN qui renvoie toutes les lignes de la table de gauche et toutes les lignes correspondantes de la table de droite. S'il n'y a pas de correspondance, les valeurs NULL sont renvoyées pour les colonnes de la table de droite.

La principale différence entre LEFT JOIN et INNER JOIN est leur comportement avec les lignes non appariées :

  • LEFT JOIN renvoie toutes les lignes du tableau de gauche, qu'il y ait ou non une correspondance dans le tableau de droite. S'il n'y a pas de correspondance dans la table de droite, les valeurs NULL sont attribuées à ces colonnes.
  • INNER JOIN renvoie uniquement les lignes correspondantes des deux tables. Les lignes non correspondantes de l'une ou l'autre table sont supprimées de l'ensemble des résultats.

Imaginez que vous disposiez d'un tableau contenant les noms des étudiants et d'un autre contenant leurs notes. En utilisant LEFT JOIN, vous obtiendrez une liste de tous les étudiants, y compris ceux qui ont des notes de NULL. En revanche, un INNER JOIN n'afficherait que les étudiants qui ont des notes, à l'exclusion des enregistrements ayant des notes NULL.

Question 14 : Que fait la clause GROUP BY ?

La clause GROUP BY regroupe les lignes ayant les mêmes valeurs dans des lignes récapitulatives. Elle est souvent combinée avec des fonctions d'agrégation (telles que SUM(), COUNT() et AVG()) pour effectuer des calculs sur des données groupées.

SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;

Dans cet exemple, la requête regroupe les lignes en fonction des valeurs de la colonne department et compte les valeurs employee_id pour chaque département. Pour plus d'exemples de requêtes similaires, consultez notre article Top 9 SQL GROUP BY Interview Questions.

Question 15 : Qu'est-ce qu'une fonction d'agrégation ?

Les fonctions d'agrégation SQL calculent un ensemble de valeurs et renvoient une seule valeur. Ces fonctions sont fréquemment utilisées pour résumer des données et effectuer des calculs sur plusieurs lignes.

Les fonctions agrégées SQL les plus courantes sont les suivantes

  • SUM(): Renvoie la somme des valeurs numériques d'un ensemble.
  • COUNT(): Compte le nombre de lignes d'un ensemble, en incluant éventuellement les valeurs non nulles.
  • AVG(): Détermine la moyenne des valeurs numériques d'un ensemble.
  • MIN(): renvoie la valeur minimale de l'ensemble.
  • MAX(): renvoie la valeur maximale de l'ensemble.
SELECT 
    AVG(salary) AS avg_salary,
    COUNT(*) AS total_employees,
    MAX(age) AS max_age
FROM 
    employees;

Dans cet exemple, les fonctions d'agrégation calculent le salaire moyen, comptent le nombre total d'employés et déterminent l'âge le plus élevé parmi tous les employés du tableau. employees table. Consultez notre Aide-mémoire sur les fonctions agrégées SQL pour obtenir d'autres exemples de ces fonctions.

Question 16 : Que fait la clause HAVING ?

La clause HAVING filtre les résultats de la clause GROUP BY. Elle n'est utilisée qu'avec des données agrégées, ce qui vous permet d'appliquer des critères de filtrage à des résultats groupés.

Imaginez que vous ayez un tableau de commandes et que vous souhaitiez trouver le montant total des ventes pour chaque client. Cependant, vous ne voulez inclure que les clients dont le total est égal ou supérieur à 1 000 $. Voici la requête que vous utiliserez :

SELECT customer_id, SUM(amount) AS total_sales
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;

Ici, la clause HAVING filtre les groupes (clients) en fonction de la condition selon laquelle le montant total des ventes du client est supérieur à 1 000 $. Elle est appliquée après l'opération GROUP BY et permet de filtrer les résultats groupés.

Question 17 : Quelle est la différence entre WHERE et HAVING ?

HAVING filtre les groupes de lignes et s'applique après l'instruction GROUP BY. Elle est destinée spécifiquement aux données agrégées et vous permet d'appliquer des critères de filtrage aux résultats groupés. WHERE filtre les lignes individuelles et s'applique avant GROUP BY.

Imaginons que vous disposiez d'un tableau de commandes et que vous souhaitiez calculer le montant total des ventes pour chaque produit, mais uniquement pour les produits dont les ventes totales dépassent 10 000 $. Voici comment vous utiliseriez la clause HAVING:

SELECT 
    product_id,
    SUM(quantity_sold * price_per_unit) AS total_sales
FROM 
    sales
GROUP BY 
    product_id
HAVING 
    SUM(quantity_sold * price_per_unit) > 10000;

Considérons maintenant le même scénario, mais cette fois-ci, vous ne voulez prendre en compte que les ventes pour lesquelles le prix unitaire du produit est supérieur à 10 $ et dont le total des ventes est supérieur à 10 000 $. Certaines de ces informations se trouvent dans des lignes individuelles, il faut donc filtrer les lignes avant de les regrouper. Nous devons également filtrer les ventes totales, de sorte que les groupes seront également filtrés.

SELECT 
    product_id,
    SUM(quantity_sold * price_per_unit) AS total_sales
FROM 
    sales
WHERE
    price_per_unit > 10
GROUP BY 
    product_id
HAVING 
    SUM(quantity_sold * price_per_unit) > 10000;

Cela montre comment la clause WHERE filtre les lignes individuelles sur la base de conditions, alors que la clause HAVING filtre les groupes de lignes sur la base de données agrégées. Pour approfondir ce sujet, consultez notre article HAVING vs. WHERE in SQL : Ce qu'il faut savoir.

Question 18 : Donnez un exemple de sous-requête SQL.

Une sous-requête SQL, également appelée requête imbriquée ou requête interne, est une requête contenue dans une autre requête. Elle est utilisée dans les instructions SELECT, INSERT, UPDATE et DELETE pour exécuter des opérations basées sur les résultats d'une autre requête. Prenons l'exemple suivant :

SELECT product_name
FROM products
WHERE category_id IN (SELECT category_id FROM categories WHERE category_name = 'Electronics');

Dans cette requête, la clause WHERE utilise une sous-requête pour extraire les valeurs category_id de la table avec la clause . categoriescategory_name 'Electronics' La requête externe récupère ensuite les noms des produits électroniques sur la base des résultats de la sous-requête.

SQL avancé Questions

Question 19 : Quelle est la différence entre UNION et UNION ALL?

UNION supprime les lignes en double de l'ensemble des résultats combinés. En revanche, UNION ALL conserve toutes les lignes, y compris les doublons.

Imaginons que nous ayons deux tables employees et managersqui contiennent toutes deux la colonne employee_id. Nous souhaitons combiner les ID des employés des deux tables.

SELECT employee_id FROM employees
UNION
SELECT employee_id FROM managers;

Dans cette requête, si employee_id apparaît à la fois dans employees et managersUNION supprimera le doublon, mais UNION ALL conservera les deux occurrences. Pour en savoir plus, consultez la section UNION vs. UNION ALL dans SQL : Quelle est la différence ?

Question 20 : Que sont les fonctions SQL window et à quoi servent-elles ?

Les fonctions SQL window effectuent des calculs sur un sous-ensemble de lignes de la table qui sont liées à la ligne actuelle. Elles sont utilisées sur une fenêtre, qui est un ensemble de lignes liées à la ligne courante.

Les fonctions de fenêtre diffèrent des requêtes GROUP BY car GROUP BY agrège les données sur la base de colonnes spécifiques, en regroupant plusieurs lignes en lignes récapitulatives. En revanche, les fonctions de fenêtre effectuent des calculs sur un ensemble de lignes liées à la ligne actuelle dans le résultat de la requête, sans réduire l'ensemble des résultats. Pour en savoir plus, consultez SQL Fonctions de fenêtrage vs. GROUP BY : Quelle est la différence ?

Pour appliquer les fonctions de fenêtre, la clause OVER est utilisée avec la syntaxe suivante :

<function>(column) OVER (PARTITION BY partition_column ORDER BY order_column)

Où :

  • <function> indique la fonction de fenêtre utilisée (par exemple, AVG(), SUM(), RANK()).
  • (column): La colonne ou l'expression à laquelle la fonction de fenêtre est appliquée.
  • PARTITION BY partition_column: Une clause facultative qui divise l'ensemble de résultats en sous-ensembles basés sur une ou plusieurs colonnes. La fonction est ensuite appliquée à chaque partition individuellement.
  • ORDER BY order_column: Une clause facultative spécifiant l'ordre des lignes dans chaque partition. Cette clause détermine les lignes qui apparaissent dans le cadre de la fenêtre pour chaque calcul.

Les fonctions de fenêtre sont fréquemment utilisées pour calculer des valeurs agrégées telles que des moyennes, des totaux et des comptages sur un ensemble de lignes. Elles sont également utilisées pour comparer les valeurs à d'autres lignes de l'ensemble de résultats, ce qui permet de déterminer les classements, les numérotations de lignes et les valeurs maximales et minimales au sein d'une fenêtre. Pour en savoir plus, lisez Quand dois-je utiliser SQL Fonctions de fenêtrage?

Imaginons que nous ayons un tableau appelé employees avec les colonnes employee_id, department_id, et salary. Nous pouvons calculer le salaire moyen par département en utilisant la fonction de fenêtre AVG():

SELECT 
    employee_id, 
    department_id, 
    salary,
    AVG(salary) OVER (PARTITION BY department_id) AS avg_salary_per_department
FROM 
    employees;

Les fonctions SQL window sont idéales pour calculer des agrégats sur des sous-ensembles spécifiques de données, comme le montre cet exemple de calcul des salaires moyens par département. Elles sont précieuses pour classer les données, ce qui peut être utile dans des tâches telles que l'évaluation des performances. Ces fonctions facilitent les comparaisons analytiques et l'identification des tendances, par exemple en ce qui concerne les revenus trimestriels. Nous examinerons d'autres exemples dans les questions suivantes.

Question 21 : Comment classer les lignes en SQL ?

Pour classer les lignes en SQL, il faut utiliser les fonctions RANK(), DENSE_RANK(), PERCENT_RANK( ) et ROW_NUMBER(). Ces fonctions attribuent un rang ou un numéro de ligne à chaque ligne du jeu de résultats en fonction de critères prédéfinis :

  • RANK(): Attribue un rang unique à chaque ligne distincte. Les lignes ayant la même valeur reçoivent le même rang, mais il y a des écarts dans le classement (par exemple, 1,2,3,3,5).
  • DENSE_RANK(): Attribue également un rang unique à chaque ligne et donne le même rang aux lignes ex æquo, mais élimine les lacunes dans la séquence de classement. Au lieu de cela, il attribue le rang consécutif suivant à la ligne qui suit les lignes à égalité (par exemple, 1,2,3,3,4).
  • PERCENT_RANK() renvoie le classement de chaque ligne de la partition/de l'ensemble de résultats sous la forme d'un percentile (de 0 à 1).
  • ROW_NUMBER() attribue un numéro de ligne unique à chaque ligne de l'ensemble de résultats, sans tenir compte des doublons ou des valeurs ex æquo.

Pour en savoir plus sur les différences entre ces fonctions, lisez notre Aperçu des fonctions de classement en SQL.

Imaginons que nous ayons une table appelée employees avec les colonnes employee_id, employee_name, et salary. Nous pouvons classer les employés en fonction de leur salaire dans l'ordre décroissant à l'aide de la fonction de fenêtre RANK():

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

Cette requête renvoie les identifiants, les noms et les salaires des employés à partir de la table employees Cette requête renvoie les identifiants, les noms et les salaires des employés à partir de la table. Elle classe ensuite chaque employé en fonction de son salaire, les salaires les plus élevés étant les moins élevés. Le résultat comprend les colonnes d'origine ainsi qu'une nouvelle colonne, salary_rank, qui indique le rang du salaire de chaque employé.

Question 22 : Qu'est-ce qu'un CTE ? Quand l'utilisez-vous ?

Une CTE, ou expression de table commune, est un ensemble de résultats temporaire nommé qui peut être utilisé dans une instruction SELECT, INSERT, UPDATE, ou DELETE. Elle vous permet de diviser des requêtes complexes en morceaux gérables et réutilisables.

Un CTE, introduit avec le mot-clé WITH, vous permet de créer une structure temporaire de type table qui n'existe que pendant l'exécution de la requête. La table temporaire peut ensuite être consultée dans la même requête. Les CTE sont particulièrement utiles pour décomposer des calculs complexes en plusieurs étapes, ce qui améliore l'organisation du code et permet de le réutiliser.

Supposons que nous ayons une table appelée employees avec les colonnes employee_id, employee_name, et salary. Nous pouvons créer un CTE pour sélectionner les employés les mieux payés qui gagnent plus de 100 000 $ :

WITH high_paid_employees AS (
  SELECT 
      employee_id, 
      employee_name, 
      salary
  FROM 
      employees
  WHERE 
      salary > 100000
)
SELECT 
    * 
FROM 
    high_paid_employees;

Question 23 : Qu'est-ce qu'un total courant et comment le calculer en SQL ?

Un total courant, également connu sous le nom de somme cumulative, est la somme d'une valeur sur un ensemble de lignes dans un ordre particulier. En SQL, un total courant peut être calculé à l'aide de SUM() et de la clause OVER().

La requête suivante calcule le total courant de order_amount sur toutes les lignes de la table orders triées par order_date:

SELECT 
    order_date, 
    order_amount,
    SUM(order_amount) OVER (ORDER BY order_date) AS running_total
FROM 
    orders;

Question 24 : Qu'est-ce qu'une moyenne mobile et comment la calculer en SQL ?

Une moyenne mobile représente la moyenne d'un ensemble de valeurs sur un ensemble de temps, où la fenêtre"se déplace" le long de l'ensemble de données. En SQL, vous pouvez calculer une moyenne mobile en utilisant AVG() avec OVER() et en spécifiant une fenêtre.

La requête suivante calcule la moyenne mobile de la valeur de la ligne actuelle et des deux lignes précédentes, classées par date.

SELECT 
    date, 
    value,
    AVG(value) OVER (ORDER BY date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS moving_average
FROM 
    dataset;

Question 25 : Comment calculer la différence d'une année sur l'autre en SQL ?

Pour calculer la différence d'une année sur l'autre en SQL, utilisez des fonctions telles que LAG() pour comparer les valeurs entre des lignes consécutives.

La requête suivante calcule la différence de revenus d'une année sur l'autre en soustrayant les revenus de l'année en cours des revenus de l'année précédente :

SELECT 
    year, 
    revenue,
    revenue - LAG(revenue, 1) OVER (ORDER BY year) AS year_to_year_difference
FROM 
    yearly_revenue;

Plus d'aide sur les questions d'entretien SQL pour les analystes de données

La maîtrise du langage SQL est essentielle pour réussir en tant qu'analyste de données. Il permet une interaction efficace avec les bases de données relationnelles, simplifiant la récupération et la manipulation des données ainsi que les calculs statistiques. En perfectionnant vos compétences en SQL, vous pourrez aborder en toute confiance les entretiens d'embauche d'analystes de données.

N'oubliez pas : c'est en forgeant qu'on devient forgeron. Pensez à vous inscrire à l'un de nos cours interactifs comme SQL pour l'analyse de données. Vous pouvez également trouver de nombreux autres exemples de questions d'entretien sur notre blog, comme l'article 27 questions d'entretien pour SQL avancé avec réponses. Vous serez prêt à réussir votre entretien en un rien de temps !