Retour à la liste des articles Articles
17 minutes de lecture

Comment classer les rangs en SQL : un guide complet.

Ne vous débattez plus avec les fonctions de classement SQL ! Cet article vous guidera à travers les cas d'utilisation de classement les plus courants.

Les classements sont utilisés autour de nous, tous les jours. Les tournois sportifs, les meilleurs films et séries télévisées sur Netflix, les magasins proposant les produits les moins chers : ce ne sont là que quelques exemples de classements que vous avez pu voir récemment.

L'utilisation des fonctions SQL RANK peut parfois être difficile. La variété des constructions différentes est énorme. Vous pouvez facilement vous perdre dans tout ce qu'il y a à apprendre à propos du classement. L'essentiel est de comprendre les concepts importants et de savoir où chercher des informations supplémentaires.

Vous trouverez dans ce guide les connaissances qui vous permettront d'écrire de nombreux types de requêtes de classement SQL. Tout d'abord, je vais expliquer comment fonctionne le classement. Je vous montrerai ensuite un certain nombre d'exemples. Si vous recherchez des cas d'utilisation spécifiques, vous pouvez simplement vous plonger dans la section Cas d'utilisation du classement SQL.

Les fonctions de classement SQL sont des fonctions de fenêtrage.

Commençons par les bases. Que sont exactement les fonctions de classement en SQL ? Elles font partie d'une famille de fonctions appelées fonctions de fenêtre. Les fonctions à fenêtre utilisent un champ d'application (une fenêtre), qui examine une partie des données pour calculer le résultat. Ensuite, elle se déplace vers une autre partie des données et calcule le résultat pour cette portion. Vous pouvez avoir une idée de base de son fonctionnement en consultant l'exemple de fonction fenêtre SQL avec explications.

Bien qu'il existe un grand nombre de fonctions de fenêtre différentes, je me concentrerai uniquement sur le classement. Je n'expliquerai pas non plus en détail le fonctionnement interne des fonctions de fenêtre. Cet article se concentrera sur les fonctions de classement SQL et sur la manière de les utiliser dans différentes situations. Pour en savoir plus sur les fonctions de fenêtre, consultez ce cours Fonctions de fenêtrage.

Fonctions de classement de base.

Les types de fonctions de classement les plus courants (et les plus simples) sont les suivants :

  • RANK()
  • DENSE_RANK()
  • ROW_NUMBER()

Que font-elles et en quoi sont-elles différentes les unes des autres ? Je vais expliquer brièvement chacune d'entre elles. Je comparerai ensuite les classements pour chacune des fonctions.

La fonction RANK() crée un classement des lignes en fonction d'une colonne donnée. Elle commence par attribuer la valeur "1" à la première ligne de l'ordre, puis attribue des chiffres plus élevés aux lignes situées plus bas dans l'ordre. Si les lignes ont la même valeur, elles sont classées de la même façon. Toutefois, la place suivante est décalée en conséquence. Par exemple, si deux lignes sont au 5e rang (ont le même rang), la ligne suivante sera au 7e rang (c'est-à-dire que le 6e rang n'existe pas).

La fonction DENSE_RANK() est assez similaire. La seule différence est qu'elle ne laisse pas de vide dans le classement. Même si plusieurs lignes peuvent avoir le même rang, la ligne suivante obtiendra le rang suivant. Par exemple, si deux rangs sont 5èmes, le rang suivant sera 6ème.

La fonction ROW_NUMBER() est différente. Si des lignes ont la même valeur, elles obtiendront toutes des rangs consécutifs (pas le même rang qu'avec les fonctions précédentes). Par exemple, si deux lignes ont la même valeur (elles seraient toutes deux 5èmes avec les fonctions précédentes), ROW_NUMBER() les placera en 5ème et 6ème position.

Vous pouvez maintenant vous demander : Si plusieurs lignes ont la même valeur et que nous utilisons ROW_NUMBER(), comment pouvons-nous savoir quelle ligne sera la première, la deuxième, etc. La réponse est plutôt sombre : nous ne le pouvons pas ! Cela dépend de nombreux facteurs, et vous ne pouvez pas prédire quelle ligne obtiendra quel rang.

Ce sont les fonctions de classement SQL de base et (probablement) les plus utilisées. Si vous souhaitez en savoir plus sur d'autres fonctions de classement, vous pouvez lire cet aperçu des fonctions de classement.

RANK() vs. DENSE_RANK() vs. ROW_NUMBER()

Maintenant que vous connaissez la théorie des fonctions de classement, comparons les résultats de ces fonctions. Pour ce faire, nous allons classer certaines personnes en fonction de leurs résultats aux examens. Examinez les données suivantes (table exam_result) :

first_namelast_namepoints
EmyrDownes70
DinaMorin70
Evie-MayBoyer80
NoraParkinson60
TrystanOconnor40
ErykMyers90
MarleneDuncan90
MariusPowell90
JoanneGoddard50
RayhanWilliamson90

Nous allons créer une requête qui classe les lignes par la colonne des points en utilisant les fonctions de classement décrites ci-dessus :

SELECT
  RANK() OVER(ORDER BY points DESC) AS rank,
  DENSE_RANK() OVER(ORDER BY points DESC) AS dense_rank,
  ROW_NUMBER() OVER(ORDER BY points DESC) AS row_number,
  first_name,
  last_name,
  points
FROM exam_result;

Analysons le code avant de l'exécuter pour voir les résultats. La première colonne que nous voulons afficher est rank. Il s'agit simplement du classement créé à l'aide de la fonction RANK(). Cependant, que signifie OVER(ORDER BY points DESC)? Cela fait partie du concept de fonction fenêtre. OVER() est un élément obligatoire de toutes les fonctions de classement (en fait, de toutes les fonctions fenêtre). Elle indique à la fonction l'étendue des données (fenêtre) et l'ordre dans lequel les lignes seront placées. Dans ce cas, nous n'avons fourni que l'ordre. Vous trouverez un exemple de définition d'une fenêtre dans la section RANK() OVER(PARTITION BY ...)-Single Column.

Puisque vous comprenez maintenant la première colonne, vous devriez également comprendre les deux suivantes. La seule différence est le nom des fonctions de classement. En outre, les trois dernières colonnes devraient être explicites, puisque vous avez déjà vu les données.

Très bien, regardons les résultats :

rankdense_rankrow_numberfirst_namelast_namepoints
111MarleneDuncan90
112RayhanWilliamson90
113MariusPowell90
114ErykMyers90
525Evie-MayBoyer80
636EmyrDownes70
637DinaMorin70
848NoraParkinson60
959JoanneGoddard50
10610TrystanOconnor40

Pouvez-vous repérer les différences entre chaque fonction ? Pour les premières lignes, les colonnes rank et dense_rank sont identiques. Cependant, row_number semble différent dès le début. Même si Marlene, Rayhan, Marius et Eryk ont le même nombre de points, la fonction ROW_NUMBER() leur a attribué des valeurs distinctes. Comme mentionné précédemment, l'ordre dans lequel ces personnes ont obtenu leur rang n'est pas déterministe.

Il est intéressant de noter que vous pouvez rendre le résultat de ROW_NUMBER() plus déterministe. Il suffit d'ajouter des colonnes supplémentaires à l'ordre (par exemple, ROW_NUMBER() OVER (ORDER BY points DESC, last_name ASC)). Ceci sera expliqué plus en détail dans la section Rang sur plusieurs colonnes.

Vous pouvez également rendre ROW_NUMBER() encore moins déterministe ! Même si la partie ORDER BY est nécessaire pour RANK() et DENSE_RANK(), ROW_NUMBER() ne l'exige pas du tout. C'est ainsi que vous pouvez numéroter les lignes sans ordre spécifique.

Une autre différence peut être observée plus bas dans le tableau. Evie-May est classée 5e par la fonction RANK() et 2e par la fonction DENSE_RANK(). La première fonction note combien de lignes ont le même classement et la ligne suivante est classée en conséquence. La seconde fonction prend simplement en compte la valeur précédente et la ligne suivante est classée en conséquence.

Prenez le temps d'examiner les classements ci-dessus et assurez-vous de bien comprendre la différence entre ces trois fonctions de classement SQL. Il est important de savoir quelle fonction utiliser dans quels cas. Si vous avez besoin de plus d'explications, consultez la rubrique Comment utiliser les fonctions de classement en SQL.

Cas d'utilisation du classement SQL.

Il est temps de nous plonger dans quelques requêtes SQL RANK. Nous allons commencer par des requêtes simples et augmenter progressivement la complexité. Le plan est le suivant :

Notez que même si nous utilisons principalement la fonction SQL RANK(), les exemples peuvent être appliqués à DENSE_RANK() et ROW_NUMBER(). Cela dépend de vos besoins. Il est donc important de comprendre les différences entre ces fonctions.

Dans les exemples, nous allons utiliser les données modifiées de l'exemple précédent. La colonne exam_date indique quand la personne a passé l'examen, et la colonne city indique dans quelle ville la personne a passé l'examen. Jetez-y un coup d'œil :

first_namelast_nameexam_datecitypoints
EmyrDownes2018-12-18San Francisco70
DinaMorin2019-01-17Los Angeles70
Evie-MayBoyer2019-01-23San Francisco80
NoraParkinson2019-02-16San Diego60
TrystanOconnor2019-02-28Los Angeles40
ErykMyers2019-06-07San Francisco90
MarleneDuncan2019-06-13San Diego90
MariusPowell2019-11-13San Diego90
JoanneGoddard2019-12-18San Diego50
MariusWilliamson2020-01-02San Diego90

Classement sur une seule colonne.

Nous allons commencer par le cas d'utilisation le plus simple : créer un classement basé sur une seule colonne. Nous allons baser notre classement sur les points :

SELECT
  RANK() OVER(ORDER BY points DESC) AS ranking,
  first_name,
  last_name,
  points
FROM exam_result;

La requête est assez simple, comme l'exemple précédent. Elle crée un classement basé sur le nombre de points par ordre décroissant. Nous utilisons RANK() OVER(ORDER BY ...) pour indiquer quelle colonne doit être utilisée pour le classement. Les résultats ressemblent à ceci :

rankingfirst_namelast_namepoints
1MarleneDuncan90
1MariusWilliamson90
1MariusPowell90
1ErykMyers90
5Evie-MayBoyer80
6EmyrDownes70
6DinaMorin70
8NoraParkinson60
9JoanneGoddard50
10TrystanOconnor40

Si vous souhaitez créer un classement basé sur une colonne différente ou dans un ordre différent (par exemple, croissant au lieu de décroissant), il suffit de changer le nom de la colonne ou de remplacer le mot-clé DESC par le mot-clé ASC.

Classement sur plusieurs colonnes

L'utilisation de plusieurs colonnes pour le classement est également simple. Il suffit d'ajouter le nom de la colonne suivante après la virgule. Si les valeurs de la première colonne sont égales, alors la deuxième colonne est prise en considération, et ainsi de suite. Regardez :

SELECT
  RANK() OVER(ORDER BY points DESC, first_name ASC) AS ranking,
  first_name,
  last_name,
  points
FROM exam_result;

Cette requête est similaire à la précédente. Nous avons ajouté first_name ASC à la clause d'ordre. De cette façon, si plusieurs lignes ont la même valeur dans la première colonne, la deuxième est prise en considération. Notez que si la deuxième colonne est identique, le classement est résolu sur la base de la fonction que nous utilisons (dans notre cas RANK()). Jetez un coup d'œil au résultat :

rankingfirst_namelast_namepoints
1ErykMyers90
2MariusWilliamson90
2MariusPowell90
4MarleneDuncan90
5Evie-MayBoyer80
6DinaMorin70
7EmyrDownes70
8NoraParkinson60
9JoanneGoddard50
10TrystanOconnor40

Comme vous pouvez le constater, les personnes ayant le même nombre de points obtiennent des classements différents parce qu'elles ont des noms différents. Les seules exceptions sont les deux personnes qui s'appellent Marius. Comme elles ont le même nom et le même nombre de points, elles ont le même rang.

Il convient de mentionner que le classement par quelques colonnes peut être utile si vous souhaitez que le résultat de la fonction ROW_NUMBER() soit déterministe. Jetez un coup d'œil à cette requête :

SELECT
  ROW_NUMBER() OVER(ORDER BY points DESC, last_name ASC) AS ranking,
  first_name,
  last_name,
  points
FROM exam_result;

Puisque chaque personne dans nos données a un nom de famille différent, nous pouvons l'ajouter à la clause de classement afin de pouvoir prédire qui obtient quel rang. Regardez :

rankingfirst_namelast_namepoints
1MarleneDuncan90
2ErykMyers90
3MariusPowell90
4MariusWilliamson90
5Evie-MayBoyer80
6EmyrDownes70
7DinaMorin70
8NoraParkinson60
9JoanneGoddard50
10TrystanOconnor40

Dans ce cas, la fonction ROW_NUMBER() fonctionne comme RANK() et DENSE_RANK() car chaque rang peut être placé de manière déterministe. Notez cependant que si plusieurs personnes avaient le même nom de famille, la fonction ROW_NUMBER() ne serait pas déterministe, même si le classement est effectué sur deux colonnes.

RANK() avec les 10 premiers résultats.

Nous créons souvent des classements pour afficher les meilleurs résultats (par exemple, les 10 premiers, les 100 premiers, etc.). Comme vous pouvez vous y attendre, vous pouvez afficher les meilleurs résultats à l'aide des fonctions de classement SQL. Une telle requête est cependant un peu plus compliquée. Jetez-y un coup d'œil :

SELECT
  *
FROM (
  SELECT
    RANK() OVER(ORDER BY points DESC) AS ranking,
    first_name,
    last_name,
    points
  FROM exam_result
) AS a
WHERE ranking <= 3;

Dans cette requête, nous utilisons une sous-requête pour calculer le classement, puis, dans la requête principale, nous filtrons les résultats afin que seuls les trois premiers soient affichés. Les résultats pourraient vous surprendre :

rankingfirst_namelast_namepoints
1MarleneDuncan90
1MariusWilliamson90
1MariusPowell90
1ErykMyers90

Comme vous pouvez le voir, les résultats présentent quatre lignes, et chacune d'entre elles a la même valeur dans la colonne de classement. C'est à cause de nos données. Quatre lignes ont le même nombre de points et obtiennent donc le même rang dans la sous-requête.

Pour écrire une telle requête vous-même, placez votre requête de classement dans une sous-requête, et effectuez un filtrage autour d'elle. Par exemple, pour afficher les 10, changez WHERE ranking <= 3 en WHERE ranking <= 10.

Il est également intéressant de noter ce qui se passe lorsque vous utilisez DENSE_RANK() avec ces données. Jetez un coup d'œil à la requête ci-dessous et à ses résultats :

SELECT
  *
FROM (
  SELECT
    DENSE_RANK() OVER(ORDER BY points DESC) AS ranking,
    first_name,
    last_name,
    points
  FROM exam_result
) AS a
WHERE ranking <= 3;
rankingfirst_namelast_namepoints
1MarleneDuncan90
1MariusWilliamson90
1MariusPowell90
1ErykMyers90
2Evie-MayBoyer80
3EmyrDownes70
3DinaMorin70

Comme vous pouvez le voir, il y a beaucoup de lignes dans le résultat ! Une fois de plus, cela est dû à la façon dont DENSE_RANK() classe chaque ligne. Cet exemple montre clairement qu'il est important de comprendre la différence entre chaque fonction et de savoir laquelle utiliser dans une situation donnée.

Classement par date.

SELECT
  RANK() OVER(ORDER BY exam_date ASC) AS ranking,
  first_name,
  last_name,
  exam_date
FROM exam_result;

Dans ce cas, nous utilisons simplement la colonne exam_date pour le classement. Il y a très peu de différence entre le classement par date et par toute autre colonne. Jetez un coup d'œil aux résultats :

rankingfirst_namelast_nameexam_date
1EmyrDownes2018-12-18
2DinaMorin2019-01-17
3Evie-MayBoyer2019-01-23
4NoraParkinson2019-02-16
5TrystanOconnor2019-02-28
6ErykMyers2019-06-07
7MarleneDuncan2019-06-13
8MariusPowell2019-11-13
9JoanneGoddard2019-12-18
10MariusWilliamson2020-01-02

La chose importante à retenir est que ASC (ascendant) dans le cas des dates signifie que la plus ancienne sera placée en premier. Dans l'ordre DESC (décroissant), la date la plus récente sera placée en premier.

Classement par mois.

Vous pouvez également souhaiter classer les lignes en utilisant uniquement une partie de la date (par exemple, le mois). Ce n'est pas très difficile si vous connaissez les fonctions de date. Jetez un coup d'œil à la requête suivante :

SELECT
  RANK() OVER(ORDER BY EXTRACT('year' FROM exam_date) ASC,
    EXTRACT('month' FROM exam_date) ASC) AS ranking,
  first_name,
  last_name,
  exam_date
FROM exam_result;

Nous utilisons la fonction EXTRACT() pour extraire une certaine partie de la date. Nous voulons tout d'abord ordonner les lignes par année, puis par mois. Nous utilisons donc d'abord EXTRACT('year' FROM exam_date), puis EXTRACT('month' FROM exam_date). Regardez les résultats :

rankingfirst_namelast_nameexam_date
1EmyrDownes2018-12-18
2Evie-MayBoyer2019-01-23
2DinaMorin2019-01-17
4NoraParkinson2019-02-16
4TrystanOconnor2019-02-28
6MarleneDuncan2019-06-13
6ErykMyers2019-06-07
8MariusPowell2019-11-13
9JoanneGoddard2019-12-18
10MariusWilliamson2020-01-02

EXTRACT()

est une fonction assez simple. Vous lui dites quelle partie de la date vous voulez extraire de la date. Il existe un grand nombre de parties de date différentes que vous pouvez utiliser. Il est préférable de consulter la documentation de votre système de gestion de base de données (SGBD). Les parties les plus courantes sont :
  • 'year'
  • 'month'
  • 'day'
  • 'hour'
  • 'minute'
  • 'second'

Il convient également de mentionner que tous les SGBD ne prennent pas en charge cette fonction. Ceux qui le font sont PostgreSQL et MySQL. Dans SQL Server, cette fonction est appelée DATEPART().

Les opérations sur la date et l'heure sont un sujet assez difficile, qui dépasse le cadre de cet article. Si vous souhaitez en savoir plus sur la fonction EXTRACT() et bien d'autres, consultez le cours Fonctions SQL standards. Il comporte une section entière consacrée aux opérations sur la date et l'heure.

Classement avec GROUP BY.

Nous allons maintenant voir comment utiliser les classements avec les fonctions d'agrégation. Même si cela semble effrayant, il s'agit d'un concept assez logique si l'on comprend bien. Votre base de données calcule d'abord les fonctions d'agrégation, puis crée un classement sur la base des valeurs calculées. Jetez un coup d'œil à cet exemple avec AVG() :

SELECT
  RANK() OVER(ORDER BY AVG(points) DESC) AS ranking,
  city,
  AVG(points) AS average_points
FROM exam_result
GROUP BY city;

Comme vous pouvez le constater, cette requête n'est pas très différente des autres requêtes que nous avons vues jusqu'à présent. Vous pouvez simplement utiliser des fonctions d'agrégation à l'intérieur de fonctions de classement. La chose importante à retenir est d'utiliser la clause GROUP BY. Comme nous l'avons mentionné plus haut, les fonctions d'agrégation sont calculées en premier. Cela signifie qu'avec GROUP BY, vous ne pouvez utiliser que des fonctions d'agrégation ou les expressions que vous regroupez dans la fonction de classement.

Par exemple, si vous souhaitez utiliser une autre colonne pour le classement afin que les lignes soient classées par cette autre colonne si le nombre moyen de points est le même, vous devez inclure cette autre colonne dans la clause GROUP BY.

La requête ci-dessus renvoie le nombre moyen de points marqués par les habitants de chaque ville.

rankingcityaverage_points
1San Francisco80
2San Diego76
3Los Angeles55

Classement avec COUNT().

Maintenant, nous allons examiner une fonction d'agrégation souvent utilisée - COUNT():

SELECT
  RANK() OVER(ORDER BY COUNT(*) DESC) AS ranking,
  city,
  COUNT(*) AS exam_takers
FROM exam_result
GROUP BY city;

Comme vous pouvez le constater, cette requête n'est pas très différente de la précédente. Toutes les fonctions d'agrégation sont utilisées de la même manière avec les fonctions de classement.

Les résultats sont les suivants :

rankingcityexam_takers
1San Diego5
2San Francisco3
3Los Angeles2

La requête calcule le nombre de personnes ayant passé l'examen dans chaque ville et crée ensuite un classement basé sur cette valeur.

Classement avec SUM().

Une autre fonction d'agrégation populaire est SUM(). Elle est également assez simple à utiliser :

SELECT
  RANK() OVER(ORDER BY SUM(points) DESC) AS ranking,
  city,
  SUM(points) AS total_points
FROM exam_result
GROUP BY city;

Une fois encore, nous utilisons simplement la fonction SUM() avec la fonction SQL RANK().

rankingcitytotal_points
1San Diego380
2San Francisco240
3Los Angeles110

Nous avons calculé cette fois le nombre total de points acquis par les personnes de chaque ville.

RANK() OVER(PARTITION BY ...) - Colonne simple.

J'espère que vous êtes prêt à aborder un concept de classement plus avancé : PARTITION BY. Il vous permet de créer des classements dans des groupes distincts. Jetez un coup d'œil à cette requête :

SELECT
  RANK() OVER(PARTITION BY city ORDER BY points DESC) AS ranking,
  city,
  first_name,
  last_name,
  points
FROM exam_result;

Dans cette requête, nous utilisons PARTITION BY avec une seule colonne pour créer un classement des personnes dans chaque ville. De cette façon, nous pouvons voir les personnes ayant les meilleurs résultats dans chaque ville. Jetez un coup d'œil aux résultats :

rankingcityfirst_namelast_namepoints
1San FranciscoErykMyers90
2San FranciscoEvie-MayBoyer80
3San FranciscoEmyrDowes70
1Los AngelesDinaMorin70
2Los AngelesTrystanOconnor40
1San DiegoMarleneDuncan90
1San DiegoMariusPowell90
1San DiegoMariusWilliamson90
4San DiegoNoraParkinson60
5San DiegoJoanneGoddard50

Comme vous pouvez le voir, les classements sont calculés séparément pour chaque ville. Ainsi, Eryk et Dina ont le même classement, même s'ils ont obtenu des notes différentes. De même, Dina et Emyr ont les mêmes résultats, mais Dina est mieux classée car elle a passé l'examen dans une autre ville.

Dans certains cas, le concept de PARTITION BY est important et il est donc utile de le rappeler. La bonne nouvelle, c'est qu'il est également assez simple à utiliser. Cependant, si vous voulez plus d'informations, vous pouvez lire Common SQL Fonctions de fenêtrage: Using Partitions With Ranking Functions sur le blog LearnSQL.com

.

RANK() OVER(PARTITION BY ...) - Colonnes multiples.

Examinons enfin la clause PARTITION BY avec plusieurs colonnes. Ce n'est pas très différent de l'utilisation de PARTITION BY avec une seule colonne. Jetez-y un coup d'œil :

SELECT
  RANK() OVER(PARTITION BY city, first_name
    ORDER BY exam_date ASC) AS ranking,
  city,
  first_name,
  last_name,
  exam_date
FROM exam_result;

Dans la requête ci-dessus, nous utilisons PARTITION BY avec deux colonnes : city et first_name. Cela signifie que pour chaque paire distincte de ville et de prénom, nous aurons des classements séparés. Jetez un coup d'œil aux résultats :

rankingcityfirst_namelast_nameexam_date
1San FranciscoErykMyers2019-06-07
1San FranciscoEvie-MayBoyer2019-01-23
1San FranciscoEmyrDowes2018-12-18
1Los AngelesDinaMorin2019-01-17
1Los AngelesTrystanOconnor2019-02-28
1San DiegoMarleneDuncan2019-06-13
1San DiegoMariusPowell2019-11-13
2San DiegoMariusWilliamson2020-01-02
1San DiegoNoraParkinson2019-02-16
1San DiegoJoanneGoddard2019-12-18

Comme vous pouvez le voir ci-dessus, la plupart des personnes sont classées en premier. Cela s'explique par le fait que la plupart des paires (ville et prénom) sont uniques. Cependant, il y a une paire qui n'est pas unique. Il y a deux personnes de San Diego qui s'appellent Marius. Marius Powell est le premier parce qu'il a passé l'examen plus tôt que Marius Williamson.

Rappelez-vous, c'est en forgeant qu'on devient forgeron

Comme vous pouvez le constater, les fonctions de classement en SQL sont utilisées dans de nombreux cas. Il est donc important de bien les connaître, car vous aurez probablement à écrire une requête de classement SQL tôt ou tard.

La meilleure façon d'apprendre les fonctions de classement (et les fonctions de fenêtre en général) est de s'exercer. Je vous recommande ce cours Fonctions de fenêtrage. Il comporte 218 exercices interactifs, ce qui équivaut à environ 20 heures de codage. C'est beaucoup, surtout si vous décidez de le faire en une seule fois. Nous ne le recommandons pas. Il est préférable de répartir vos études sur plusieurs jours. Vous trouverez ici d'autres conseils pour rester en bonne santé pendant l'apprentissage de SQL

Prenez soin de votre corps tout en développant votre carrière, et commencez à apprendre SQL dès aujourd'hui.

Nous avons également tout préparé au cas où vous n'auriez pas le temps d'effectuer un apprentissage approfondi, où vous auriez besoin de quelque chose pour vous aider en attendant, ou simplement d'une référence pour vous aider à vous souvenir de ce que vous avez appris. Nous avons tout compacté dans une antisèche SQL RANK, qui pourrait s'avérer utile dans de nombreuses situations.