{"id":3085631,"date":"2024-07-12T08:43:19","date_gmt":"2024-07-12T08:43:19","guid":{"rendered":"https:\/\/clicdata.com\/blog\/utilisation-des-fonctions-sql-soundex-lag-partition-by-between-row_number-pour-nettoyer-les-donnees\/"},"modified":"2025-05-14T10:34:45","modified_gmt":"2025-05-14T10:34:45","slug":"fonctions-sql","status":"publish","type":"post","link":"https:\/\/www.clicdata.com\/fr\/blog\/fonctions-sql\/","title":{"rendered":"Utilisation des fonctions SQL SOUNDEX(), LAG, PARTITION BY BETWEEN, ROW_NUMBER pour nettoyer les donn\u00e9es"},"content":{"rendered":"\n<p>SQL, la deuxi\u00e8me langue la plus parl\u00e9e par les data analystes.  Et bien souvent, nous utilisons les m\u00eames fonctions par habitude, ou par confort, mais il nous arrive parfois de ne pas obtenir les bons r\u00e9sultats.<\/p>\n\n\n\n<p>Dans cet article, nous vous pr\u00e9sentons quatre fonctions SQL trop peu connues avec des exemples pratiques.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fonction SOUNDEX() pour nettoyer les donn\u00e9es en fonction de la phon\u00e9tique des mots<\/h2>\n\n\n\n<p>Probablement l&rsquo;une des fonctions SQL les moins connues mais aussi l&rsquo;une des plus int\u00e9ressantes !<\/p>\n\n\n\n<p>La fonction <code>SQL SOUNDEX()<\/code> est utilis\u00e9e pour convertir une cha\u00eene de caract\u00e8res en une repr\u00e9sentation phon\u00e9tique, ce qui est particuli\u00e8rement utile pour rechercher et faire correspondre des cha\u00eenes qui peuvent avoir des orthographes diff\u00e9rentes mais des sons similaires.<\/p>\n\n\n\n<p>La fonction <code>SOUNDEX()<\/code> fonctionne en attribuant un code de quatre caract\u00e8res \u00e0 chaque cha\u00eene en fonction de sa prononciation. Les cha\u00eenes qui ont des sons similaires auront des valeurs SOUNDEX identiques ou similaires.<\/p>\n\n\n\n<p>Voici la syntaxe de base de la fonction <code>SOUNDEX()<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code has-background\" style=\"background-color:#ebebeb70\"><code>SOUNDEX(string)<\/code><\/pre>\n\n\n\n<p>Le r\u00e9sultat du SOUNDEX() sur &lsquo;string&rsquo; est <strong>S365<\/strong>.<\/p>\n\n\n\n<p>Voici comment la fonction SOUNDEX() convertit les caract\u00e8res en chiffres :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Chiffres<\/th><th>Caract\u00e8res<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>b, f, p, v<\/td><\/tr><tr><td>2<\/td><td>c, g, j, k, q, s, x, z<\/td><\/tr><tr><td>3<\/td><td>d, t<\/td><\/tr><tr><td>4<\/td><td>l<\/td><\/tr><tr><td>5<\/td><td>m, n<\/td><\/tr><tr><td>6<\/td><td>r<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Les caract\u00e8res suivants sont ignor\u00e9s : a, e, i, o, u, h, w et y.<\/p>\n\n\n\n<p>Maintenant, voyons un exemple d&rsquo;application :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Utiliser SOUNDEX() pour nettoyer des noms de villes<\/h3>\n\n\n\n<p>Supposons que vous avez une table avec un champ de nom de ville, et que ces donn\u00e9es sont saisies manuellement. Le risque est d&rsquo;avoir des orthographes diff\u00e9rentes pour une m\u00eame ville, par exemple :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Nom de la ville<\/th><\/tr><\/thead><tbody><tr><td>Springfield<\/td><\/tr><tr><td>Springfeld<\/td><\/tr><tr><td>Sprintfield<\/td><\/tr><tr><td>Smithtown<\/td><\/tr><tr><td>Smythton<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Au lieu d&rsquo;avoir trois versions diff\u00e9rentes de &lsquo;Springfield&rsquo;, nous ne devrions en avoir qu&rsquo;une seule, tout comme pour &lsquo;Smithtown&rsquo;.<\/p>\n\n\n\n<p>Utilisons maintenant la fonction SOUNDEX() pour trouver des noms \u00e0 sonorit\u00e9 similaire :<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Ville<\/th><th>R\u00e9sultats SOUNDEX<\/th><\/tr><\/thead><tbody><tr><td>Springfield<\/td><td>S165<\/td><\/tr><tr><td>Springfeld<\/td><td>S165<\/td><\/tr><tr><td>Sprintfield<\/td><td>S165<\/td><\/tr><tr><td>Smithtown<\/td><td>S530<\/td><\/tr><tr><td>Smythton<\/td><td>S530<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Voil\u00e0 !<\/p>\n\n\n\n<p>La fonction SOUNDEX() nous permet de d\u00e9tecter les noms de villes qui sont en r\u00e9alit\u00e9 orthographi\u00e9s diff\u00e9remment mais ne devraient pas l&rsquo;\u00eatre.<\/p>\n\n\n\n<p>C&rsquo;est un exemple simple de la fa\u00e7on dont vous pouvez utiliser la fonction SOUNDEX() en SQL pour trouver des correspondances approximatives bas\u00e9es sur la similarit\u00e9 phon\u00e9tique des cha\u00eenes.<\/p>\n\n\n\n<p>  <strong>Pro tip : Pour d\u00e9tecter le vrai nom de la ville, une base de donn\u00e9es de villes peut \u00eatre utilis\u00e9e, ou si elle n&rsquo;est pas disponible, vous pouvez compter le nombre d&rsquo;occurrences de chaque valeur. Ensuite, vous pouvez supposer que le bon est celui avec la valeur la plus \u00e9lev\u00e9e.<\/strong><\/p>\n\n\n\n<p>Attention, SOUNDEX a quelques limitations ! Par exemple, le nombre de caract\u00e8res \u00e0 encoder. Voici un exemple avec un nom de lieu plus long :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"SOUNDEX('Riverdale Town')\nSOUNDEX('Riverdale Park')\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg  style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #79B8FF\">SOUNDEX<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;Riverdale Town&#39;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #79B8FF\">SOUNDEX<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;Riverdale Park&#39;<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Les deux retourneront R163 car les lettres suivantes donneront ces r\u00e9sultats :<\/p>\n\n\n\n<p>R &gt; R<\/p>\n\n\n\n<p>V &gt; 1<\/p>\n\n\n\n<p>R &gt; 6<\/p>\n\n\n\n<p>D &gt; 3<\/p>\n\n\n\n<p>Seules les quatre premi\u00e8res consonnes sont encod\u00e9es (R, V, R, D) et tout ce qui vient apr\u00e8s n&rsquo;affectera pas les r\u00e9sultats de SOUNDEX. C&rsquo;est pourquoi les mots longs avec les m\u00eames premi\u00e8res lettres auront les m\u00eames r\u00e9sultats SOUNDEX().<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fonction LAG pour analyser les donn\u00e9es dans le temps<\/h2>\n\n\n\n<p>En SQL, la fonction <code>LAG<\/code> est tr\u00e8s pratique lorsque vous cherchez \u00e0 trouver la valeur pr\u00e9c\u00e9dente ou suivante d&rsquo;une ligne. Par exemple, nous l&rsquo;avons utilis\u00e9e lorsque nous voulions comparer une diff\u00e9rence entre deux p\u00e9riodes.<\/p>\n\n\n\n<p>Dans la plupart des cas, vous travaillez avec des donn\u00e9es pr\u00e9sent\u00e9es comme ceci : <\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-functions-lag-arr-raw-1024x467.png\" alt=\"blog sql functions lag arr raw\" class=\"wp-image-2069906\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<p>Dans cet exemple, nous examinons une table d&rsquo;abonnement avec une ligne par client et le montant de leur abonnement pour chaque mois.<\/p>\n\n\n\n<p>Avec cette table, vous pouvez analyser le MRR par client ou le MRR total au fil du temps. <strong>Mais vous ne pouvez pas obtenir le nouveau MRR \u00e0 un moment donn\u00e9.<\/strong><\/p>\n\n\n\n<p>Avec la fonction LAG, vous pouvez rapidement effectuer cette analyse. Voici \u00e0 quoi ressemble la fonction:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"LAG(ARR, 0) OVER (PARTITION BY [Month], [Customer] ORDER BY [Month] DESC)\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg  style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #79B8FF\">LAG<\/span><span style=\"color: #E1E4E8\">(ARR, <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">OVER<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">PARTITION<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">BY<\/span><span style=\"color: #E1E4E8\"> [Month], [Customer] <\/span><span style=\"color: #F97583\">ORDER BY<\/span><span style=\"color: #E1E4E8\"> [Month] <\/span><span style=\"color: #F97583\">DESC<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Comment lire cette fonction :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>0<\/strong> correspond \u00e0 la valeur par d\u00e9faut<\/li>\n\n\n\n<li><strong>LAG<\/strong> sera effectu\u00e9 pour chaque client, par mois (partition by)<\/li>\n\n\n\n<li><strong>desc<\/strong> parce que nous recherchons la valeur du mois pr\u00e9c\u00e9dent<\/li>\n<\/ul>\n\n\n\n<p>Pour mesurer le nouveau MRR pour chaque mois, nous recommandons de suivre cette m\u00e9thode :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ajouter une colonne \u00ab\u00a0ARR Previous Month\u00a0\u00bb<\/li>\n\n\n\n<li>Ajouter une colonne \u00ab\u00a0Delta\u00a0\u00bb qui n&rsquo;est pas obligatoire mais simplifie les conditions<\/li>\n\n\n\n<li>Ajouter une colonne \u00ab\u00a0Type\u00a0\u00bb pour identifier les clients Nouveaux, Expansion, Contraction ou Churned.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-functions-lag-arr-type-1024x281-1.png\" alt=\"blog sql functions lag arr type\" class=\"wp-image-2069910\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<p>Pour cr\u00e9er la derni\u00e8re colonne, nous pouvons utiliser l&rsquo;instruction <strong>CASE WHEN<\/strong> avec la logique suivante :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CASE\n    WHEN LAG([ARR], 0) OVER (PARTITION BY [Month], [Customer] ORDER BY [Month] DESC) IS NULL THEN 'NEW'\n    WHEN [ARR] &gt; LAG([ARR], 0) OVER (PARTITION BY [Month], [Customer] ORDER BY [Month] DESC) THEN 'EXPANSION'\n    WHEN [ARR] = 0 THEN 'CHURN'\n    WHEN [ARR] &lt; LAG([ARR], 0) OVER (PARTITION BY [Month], [Customer] ORDER BY [Month] DESC) THEN 'CONTRACTION'\n    ELSE 'NO CHANGE'\nEND\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg  style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">CASE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">LAG<\/span><span style=\"color: #E1E4E8\">([ARR], <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">OVER<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">PARTITION<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">BY<\/span><span style=\"color: #E1E4E8\"> [Month], [Customer] <\/span><span style=\"color: #F97583\">ORDER BY<\/span><span style=\"color: #E1E4E8\"> [Month] <\/span><span style=\"color: #F97583\">DESC<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">IS<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">NULL<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;NEW&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> [ARR] <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">LAG<\/span><span style=\"color: #E1E4E8\">([ARR], <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">OVER<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">PARTITION<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">BY<\/span><span style=\"color: #E1E4E8\"> [Month], [Customer] <\/span><span style=\"color: #F97583\">ORDER BY<\/span><span style=\"color: #E1E4E8\"> [Month] <\/span><span style=\"color: #F97583\">DESC<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;EXPANSION&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> [ARR] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;CHURN&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> [ARR] <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">LAG<\/span><span style=\"color: #E1E4E8\">([ARR], <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">OVER<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">PARTITION<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">BY<\/span><span style=\"color: #E1E4E8\"> [Month], [Customer] <\/span><span style=\"color: #F97583\">ORDER BY<\/span><span style=\"color: #E1E4E8\"> [Month] <\/span><span style=\"color: #F97583\">DESC<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;CONTRACTION&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">ELSE<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;NO CHANGE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">END<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Avec la colonne Delta, qui est la diff\u00e9rence entre ARR et ARR du mois dernier, vous pouvez simplement faire :<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"CASE\n    WHEN DELTA &gt; 0 AND [Delta] = [ARR] THEN 'NEW'\n    WHEN [Delta] &gt; 0 THEN 'EXPANSION'\n    WHEN [ARR] = 0 THEN 'CHURN'\n    WHEN [Delta] &lt; 0 THEN 'CONTRACTION'\n    ELSE 'NO CHANGE'\nEND\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg  style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">CASE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> DELTA <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">AND<\/span><span style=\"color: #E1E4E8\"> [Delta] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> [ARR] <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;NEW&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> [Delta] <\/span><span style=\"color: #F97583\">&gt;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;EXPANSION&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> [ARR] <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;CHURN&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">WHEN<\/span><span style=\"color: #E1E4E8\"> [Delta] <\/span><span style=\"color: #F97583\">&lt;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">0<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">THEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;CONTRACTION&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">ELSE<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;NO CHANGE&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">END<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>La colonne Delta est souvent une meilleure option car elle peut \u00eatre utilis\u00e9e dans les tableaux de bord : par exemple, elle r\u00e9v\u00e8le qu&rsquo;en f\u00e9vrier nous avions +13k $ de ARR et aucune perte, et qu&rsquo;en janvier le ARR a augment\u00e9 de +30k $ sans perte \u2013 et que votre \u00e9quipe commerciale fait un excellent travail !  \ufe0f<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Fonction PARTITION BY + BETWEEN pour calculer les valeurs sur des p\u00e9riodes glissantes<\/h2>\n\n\n\n<p>La fonction <code>SQL PARTITION BY<\/code> est tr\u00e8s courante, mais elle est rarement coupl\u00e9e avec la fonction BETWEEN. Elle peut \u00eatre tr\u00e8s pratique !<\/p>\n\n\n\n<p>Par exemple, si vous voulez calculer les ventes mensuelles de chaque commercial et leurs ventes sur les 12 derniers mois glissants.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-functions-partitionby-between-sales-raw-1016x1024-1.png\" alt=\"blog sql functions partitionby between sales raw\" class=\"wp-image-2069928\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<p>C&rsquo;est facile dans Excel car il suffit de s\u00e9lectionner les cellules pour obtenir ces chiffres.<\/p>\n\n\n\n<p>Mais en SQL, ce n&rsquo;est pas si simple, surtout lorsque les lignes du jeu de donn\u00e9es ne sont pas ordonn\u00e9es ou agr\u00e9g\u00e9es au bon niveau et lorsque vous souhaitez analyser les donn\u00e9es sur deux types de p\u00e9riodes diff\u00e9rentes en parall\u00e8le \u2013 dans notre exemple, les ventes par mois et les ventes sur 12 mois glissants.<\/p>\n\n\n\n<p>Dans notre exemple, nous voulons analyser les ventes sur 3 mois glissants pour simplifier le jeu de donn\u00e9es. Voici les \u00e9tapes \u00e0 suivre :<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9tape 1 \u2013 Convertir la date de vente au format date<\/h3>\n\n\n\n<p>En supposant que la date de vente est d\u00e9j\u00e0 dans un format standard comme YYYY-MM-DD.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9tape 2 \u2013 Calculer le montant moyen des ventes par mois pour chaque repr\u00e9sentant commercial<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"SELECT\n    EXTRACT(YEAR FROM sales_date) AS sales_year,\n    EXTRACT(MONTH FROM sales_date) AS sales_month,\n    sales_rep_name,\n    SUM(sales_amount) AS sales_amount\nFROM\n    your_sales_table_name\nGROUP BY\n    EXTRACT(YEAR FROM sales_date),\n    EXTRACT(MONTH FROM sales_date),\n    sales_rep_name;\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg  style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">SELECT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    EXTRACT(<\/span><span style=\"color: #F97583\">YEAR<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> sales_year,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    EXTRACT(<\/span><span style=\"color: #F97583\">MONTH<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> sales_month,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    sales_rep_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">SUM<\/span><span style=\"color: #E1E4E8\">(sales_amount) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> sales_amount<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">FROM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    your_sales_table_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">GROUP BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    EXTRACT(<\/span><span style=\"color: #F97583\">YEAR<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    EXTRACT(<\/span><span style=\"color: #F97583\">MONTH<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    sales_rep_name;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9tape 3 \u2013 Utiliser PARTITION BY et BETWEEN pour agr\u00e9ger les donn\u00e9es par mois pour chaque repr\u00e9sentant commercial<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-functions-partitionby-between-period-1024x669-1.png\" alt=\"blog sql functions partitionby between period\" class=\"wp-image-2069924\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:13px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">SQL<\/span><span role=\"button\" tabindex=\"0\" data-code=\"SELECT\n    sales_year,\n    sales_month,\n    sales_rep_name,\n    sales_amount AS Sales_per_month,\n    AVG(sales_amount) OVER (PARTITION BY sales_rep_name ORDER BY sales_rep_name, sales_year, sales_month RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) AS 3months_moving_avg_sales_amount\nFROM (\n    SELECT\n        EXTRACT(YEAR FROM sales_date) AS sales_year,\n        EXTRACT(MONTH FROM sales_date) AS sales_month,\n        sales_rep_name,\n        SUM(sales_amount) AS sales_amount\n    FROM\n        your_sales_table_name\n    GROUP BY\n        EXTRACT(YEAR FROM sales_date),\n        EXTRACT(MONTH FROM sales_date),\n        sales_rep_name\n) AS subquery_alias;\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg  style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">SELECT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    sales_year,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    sales_month,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    sales_rep_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    sales_amount <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> Sales_per_month,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #79B8FF\">AVG<\/span><span style=\"color: #E1E4E8\">(sales_amount) <\/span><span style=\"color: #F97583\">OVER<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">PARTITION<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">BY<\/span><span style=\"color: #E1E4E8\"> sales_rep_name <\/span><span style=\"color: #F97583\">ORDER BY<\/span><span style=\"color: #E1E4E8\"> sales_rep_name, sales_year, sales_month <\/span><span style=\"color: #F97583\">RANGE<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">BETWEEN<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">PRECEDING<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">AND<\/span><span style=\"color: #E1E4E8\"> CURRENT <\/span><span style=\"color: #F97583\">ROW<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> 3months_moving_avg_sales_amount<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">SELECT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        EXTRACT(<\/span><span style=\"color: #F97583\">YEAR<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> sales_year,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        EXTRACT(<\/span><span style=\"color: #F97583\">MONTH<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> sales_month,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        sales_rep_name,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #79B8FF\">SUM<\/span><span style=\"color: #E1E4E8\">(sales_amount) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> sales_amount<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">FROM<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        your_sales_table_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">GROUP BY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        EXTRACT(<\/span><span style=\"color: #F97583\">YEAR<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        EXTRACT(<\/span><span style=\"color: #F97583\">MONTH<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #E1E4E8\"> sales_date),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        sales_rep_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">AS<\/span><span style=\"color: #E1E4E8\"> subquery_alias;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Voici la table retourn\u00e9e :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-functions-partitionby-between-avg-three-months-1024x450-1.png\" alt=\"blog sql functions partitionby between avg three months\" class=\"wp-image-2069932\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Fonction ROW_NUMBER pour cr\u00e9er des identifiants uniques ou des classements<\/h2>\n\n\n\n<p>La fonction <code>ROW_NUMBER<\/code> peut \u00eatre utilis\u00e9e pour de nombreux cas, mais nous l&rsquo;avons utilis\u00e9e pour deux sc\u00e9narios principaux : cr\u00e9er un identifiant unique et cr\u00e9er des classements tout en g\u00e9rant les valeurs \u00e9gales. Examinons ces deux cas avec des exemples.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cas 1 : Utiliser ROW_NUMBER pour cr\u00e9er un identifiant unique<\/h3>\n\n\n\n<p>Dans cette simple table, nous avons une liste de 5 publications sur les r\u00e9seaux sociaux avec le nombre de likes et de commentaires pour chacune d&rsquo;elles.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ROW_NUMBER() OVER (PARTITION BY &#91;post title] ORDER BY &#91;likes] DESC)<\/code><\/pre>\n\n\n\n<p>Retournera :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-function-row-number-unique-id-1024x153-1.png\" alt=\"blog sql function row number unique id\" class=\"wp-image-2069940\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<p>La valeur \u00e9gale \u00e0 1 retourne le post avec le plus de likes en raison de l&rsquo;ordre DESC.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Cas 2 : Utiliser ROW_NUMBER au lieu de RANK pour cr\u00e9er un classement lorsque les valeurs sont \u00e9gales<\/h3>\n\n\n\n<p>Nous voulions vous montrer la diff\u00e9rence entre les fonctions <code>ROW_NUMBER<\/code> et <code>RANK<\/code> dans un exemple concret. Vous pouvez choisir entre l&rsquo;une ou l&rsquo;autre lorsque vous souhaitez cr\u00e9er un classement des publications bas\u00e9 sur le nombre de likes. Dans ce cas, nous avons deux publications qui ont g\u00e9n\u00e9r\u00e9 le m\u00eame nombre de likes, 312.<\/p>\n\n\n\n<p><code>ROW_NUMBER<\/code> ne permet pas d&rsquo;avoir deux valeurs identiques, elles seront diff\u00e9renci\u00e9es en fonction de l&rsquo;ORDER BY.<\/p>\n\n\n\n<p>La fonction <code>RANK<\/code> donnera le m\u00eame ID.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/www.clicdata.com\/wp-content\/uploads\/2025\/05\/blog-sql-function-row-number-same-value-1024x152-1.png\" alt=\"blog sql function row number same value\" class=\"wp-image-2069936\" style=\"object-fit:cover\"\/><\/figure>\n<\/div>\n\n\n<p>Dans ce cas, en utilisant la fonction <code>ROW_NUMBER<\/code>, le post \u00ab\u00a0Unlock Business Insights: 5 Analytical Strategies for Success\u00a0\u00bb est class\u00e9 1er parce que le titre du post commence par un U, et nous avons utilis\u00e9 ORDER BY DESC.<\/p>\n\n\n\n<div style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Optimisez votre code SQL avec ces 4 fonctions <\/h2>\n\n\n\n<p>La transformation des donn\u00e9es prend une grande partie de notre temps, alors chaque fois que nous apprenons de nouvelles astuces pour la rendre plus efficace, nous les testons !<\/p>\n\n\n\n<p>Nous utilisons SOUNDEX, LAG, PARTITION BY BETWEEN et ROW_NUMBER assez souvent pour nos projets internes et clients, et l&rsquo;\u00e9quipe data les adore !<\/p>\n\n\n\n<p>Si vous connaissez d&rsquo;autres fonctions SQL sous-utilis\u00e9es, <a href=\"https:\/\/www.linkedin.com\/company\/clicdata\/\" target=\"_blank\" rel=\"noreferrer noopener\">partagez-les avec nous<\/a> !<\/p>\n\n\n\n<p>  <strong>Pro tip : couplez vos fonctions SQL avec les formules ClicData pour affiner le traitement et l&rsquo;analyse de vos donn\u00e9es :<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"How to optimize your SQL queries with ClicData formulas? | ClicData Tutorials\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/vaByU9CjqrM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>SQL, la deuxi\u00e8me langue la plus parl\u00e9e par les data analystes. Et bien souvent, nous utilisons les m\u00eames fonctions par habitude, ou par confort, mais il nous arrive parfois de ne pas obtenir les bons r\u00e9sultats. Dans cet article, nous vous pr\u00e9sentons quatre fonctions SQL trop peu connues avec des exemples pratiques. Fonction SOUNDEX() pour [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":3082839,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_seopress_robots_primary_cat":"","_seopress_titles_title":"4 Fonctions SQL M\u00e9connues Pour Nettoyer Vos Donn\u00e9es | ClicData","_seopress_titles_desc":"Avez-vous d\u00e9j\u00e0 utilis\u00e9 les fonctions SQL SOUNDEX, LAG, ROW_NUMBER ou Partition By avec Between ? Apprenez \u00e0 les utiliser pour vos projets de gestion de donn\u00e9es et d'analyse.","_seopress_robots_index":"","footnotes":""},"categories":[100227],"tags":[],"role":[],"sector":[],"class_list":["post-3085631","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-management"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/posts\/3085631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/comments?post=3085631"}],"version-history":[{"count":1,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/posts\/3085631\/revisions"}],"predecessor-version":[{"id":3085632,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/posts\/3085631\/revisions\/3085632"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/media\/3082839"}],"wp:attachment":[{"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/media?parent=3085631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/categories?post=3085631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/tags?post=3085631"},{"taxonomy":"role","embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/role?post=3085631"},{"taxonomy":"sector","embeddable":true,"href":"https:\/\/www.clicdata.com\/fr\/wp-json\/wp\/v2\/sector?post=3085631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}