{"title":"Expressions conditionnelles","version":"2.1","locale":"fr","docname":"ref/models/conditional-expressions","url":"/fr/2.1/ref/models/conditional-expressions/","canonical":"https://djangodocs.dev/fr/2.1/ref/models/conditional-expressions/","summary":"Les expressions conditionnelles permettent d’utiliser de la logique if … elif … else à l’intérieur des filtres, des annotations, des agrégations et des mises à…","html":"<h1>Expressions conditionnelles<a class=\"heading-anchor\" href=\"#conditional-expressions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Les expressions conditionnelles permettent d’utiliser de la logique <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#if\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> à l’intérieur des filtres, des annotations, des agrégations et des mises à jour. Une expression conditionnelle évalue une série de conditions pour chaque ligne d’une table et renvoie l’expression résultante correspondante. Les expressions conditionnelles peuvent également être combinées et imbriquées comme toute autre <a class=\"reference internal\" href=\"/fr/2.1/ref/models/expressions/\"><span class=\"doc\">expression</span></a>.</p>\n<section id=\"the-conditional-expression-classes\">\n<h2>Les classes d’expressions conditionnelles<a class=\"heading-anchor\" href=\"#the-conditional-expression-classes\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nous allons utiliser le modèle suivant dans les exemples qui suivront :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Client</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">REGULAR</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;R&#39;</span>\n    <span class=\"n\">GOLD</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;G&#39;</span>\n    <span class=\"n\">PLATINUM</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;P&#39;</span>\n    <span class=\"n\">ACCOUNT_TYPE_CHOICES</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"p\">(</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Regular&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Gold&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">(</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Platinum&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">registered_on</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">account_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ACCOUNT_TYPE_CHOICES</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"when\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">When</span></code><a class=\"heading-anchor\" href=\"#when\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.When\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">When</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">condition</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">then</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">lookups</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.When\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> est utilisé pour englober une condition et ses résultats pour leur exploitation dans une expression conditionnelle. L’emploi d’un objet <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> est semblable à celui d’une méthode <a class=\"reference internal\" href=\"/fr/2.1/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>. La condition peut être indiquée en utilisant des objets de <a class=\"reference internal\" href=\"/fr/2.1/ref/models/querysets/#field-lookups\"><span class=\"std std-ref\">recherche de champ</span></a> ou des objets <a class=\"reference internal\" href=\"/fr/2.1/ref/models/querysets/#django.db.models.Q\" title=\"django.db.models.Q\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Q</span></code></a>. Le résultat est fourni en utilisant le mot-clé <code class=\"docutils literal notranslate\"><span class=\"pre\">then</span></code>.</p>\n<p>Quelques exemples :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">F</span><span class=\"p\">,</span> <span class=\"n\">Q</span><span class=\"p\">,</span> <span class=\"n\">When</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># String arguments refer to fields; the following two examples are equivalent:</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># You can use field lookups in the condition</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__gt</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2014</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>     <span class=\"n\">registered_on__lt</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"p\">(</span><span class=\"mi\">2015</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>     <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"s1\">&#39;account_type&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Complex conditions can be created using Q objects</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;John&quot;</span><span class=\"p\">)</span> <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Paul&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>     <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>N’oubliez pas que chacune de ces valeurs peut être elle-même une expression.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Comme le paramètre nommé <code class=\"docutils literal notranslate\"><span class=\"pre\">then</span></code> est réservé au résultat de l’expression <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code>, un conflit potentiel existe si un <a class=\"reference internal\" href=\"/fr/2.1/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Model</span></code></a> possède un champ nommé <code class=\"docutils literal notranslate\"><span class=\"pre\">then</span></code>. Ceci peut être résolu de deux manières :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">then__exact</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">then</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">),</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"case\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">Case</span></code><a class=\"heading-anchor\" href=\"#case\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.db.models.expressions.Case\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Case</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">cases</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.db.models.expressions.Case\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Une expression <code class=\"docutils literal notranslate\"><span class=\"pre\">Case()</span></code> est semblable à une instruction <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#if\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> en Python. Chaque <code class=\"docutils literal notranslate\"><span class=\"pre\">condition</span></code> dans les objets <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> fournis est évaluée dans l’ordre, jusqu’à ce que l’une d’elle résulte en une valeur vraie. L’expression <code class=\"docutils literal notranslate\"><span class=\"pre\">result</span></code> de l’objet <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> correspondant est renvoyée.</p>\n<p>Un exemple simple :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">datetime</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">date</span><span class=\"p\">,</span> <span class=\"n\">timedelta</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Case</span><span class=\"p\">,</span> <span class=\"n\">CharField</span><span class=\"p\">,</span> <span class=\"n\">Value</span><span class=\"p\">,</span> <span class=\"n\">When</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jane Doe&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">36</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;James Smith&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jack Black&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">10</span> <span class=\"o\">*</span> <span class=\"mi\">365</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get the discount for each Client based on the account type</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">discount</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;5%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;10%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;0%&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">CharField</span><span class=\"p\">(),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;discount&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jane Doe&#39;, &#39;0%&#39;), (&#39;James Smith&#39;, &#39;5%&#39;), (&#39;Jack Black&#39;, &#39;10%&#39;)]&gt;</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Case()</span></code> accepte un nombre indéfini d’objets <code class=\"docutils literal notranslate\"><span class=\"pre\">When()</span></code> comme paramètres individuels. D’autres options sont fournies sous forme de paramètres nommés. Si aucune des conditions évaluées ne résulte en une valeur vraie, c’est alors l’expression indiquée dans le paramètre nommé <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> qui est renvoyée. Si aucun paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> n’est fourni, c’est <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> qui est utilisé.</p>\n<p>Si nous voulions modifier notre requête précédente pour obtenir le rabais sur la base de la fidélité de <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code>, nous pourrions le faire à l’aide d’expressions de recherche :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_month_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_year_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get the discount for each Client based on the registration date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">discount</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_year_ago</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;10%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_month_ago</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;5%&#39;</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"s1\">&#39;0%&#39;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">CharField</span><span class=\"p\">(),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;discount&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jane Doe&#39;, &#39;5%&#39;), (&#39;James Smith&#39;, &#39;0%&#39;), (&#39;Jack Black&#39;, &#39;10%&#39;)]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Rappelez-vous que les conditions sont évaluées dans l’ordre, ce qui fait que dans l’exemple ci-dessus, nous obtenons le résultat correct même si la seconde condition correspondait à la fois à Jane Doe et à Jack Black. Cela fonctionne exactement de la même manière qu’avec l’instruction <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#if\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">if</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#elif\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">elif</span></code></a> … <a class=\"reference external\" href=\"https://docs.python.org/3/reference/compound_stmts.html#else\" title=\"(disponible dans Python v3.14)\"><code class=\"xref std std-keyword docutils literal notranslate\"><span class=\"pre\">else</span></code></a> en Python.</p>\n</aside>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Case()</span></code> fonctionne aussi dans une clause <code class=\"docutils literal notranslate\"><span class=\"pre\">filter()</span></code>. Par exemple, pour trouver tous les clients « gold » qui se sont inscrits il y a plus d’un mois et les clients « platinum » qui se sont inscrits il y a plus d’un an :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_month_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_year_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">a_month_ago</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span> <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">a_year_ago</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;account_type&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jack Black&#39;, &#39;P&#39;)]&gt;</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"advanced-queries\">\n<h2>Requêtes avancées<a class=\"heading-anchor\" href=\"#advanced-queries\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Les expressions conditionnelles peuvent être utilisées dans les annotations, les agrégations, les recherches et les mises à jour. Elles peuvent également être combinées et imbriquées avec d’autres expressions. Cela permet d’effectuer des requêtes conditionnelles puissantes.</p>\n<section id=\"conditional-update\">\n<h3>Mise à jour conditionnelle<a class=\"heading-anchor\" href=\"#conditional-update\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Admettons que nous voulions modifier le type de compte <code class=\"docutils literal notranslate\"><span class=\"pre\">account_type</span></code> de nos clients pour qu’il corresponde aux dates d’enregistrement. Nous pouvons le faire à l’aide d’une expression conditionnelle et de la méthode <a class=\"reference internal\" href=\"/fr/2.1/ref/models/querysets/#django.db.models.query.QuerySet.update\" title=\"django.db.models.query.QuerySet.update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">update()</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_month_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a_year_ago</span> <span class=\"o\">=</span> <span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">365</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Update the account_type for each Client from the registration date</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Case</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_year_ago</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>             <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">When</span><span class=\"p\">(</span><span class=\"n\">registered_on__lte</span><span class=\"o\">=</span><span class=\"n\">a_month_ago</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>             <span class=\"n\">then</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">Value</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values_list</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;account_type&#39;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [(&#39;Jane Doe&#39;, &#39;G&#39;), (&#39;James Smith&#39;, &#39;R&#39;), (&#39;Jack Black&#39;, &#39;P&#39;)]&gt;</span>\n</code></pre></div>\n</section>\n<section id=\"conditional-aggregation\">\n<span id=\"id1\"></span><h3>Agrégation conditionnelle<a class=\"heading-anchor\" href=\"#conditional-aggregation\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Et si nous voulions savoir combien de clients existent pour chaque type de compte ? Nous pouvons utiliser le paramètre <code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> des <a class=\"reference internal\" href=\"/fr/2.1/ref/models/querysets/#aggregation-functions\"><span class=\"std std-ref\">fonctions d’agrégat</span></a> pour pouvoir faire cela :</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Create some more Clients first so we can have something to count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jean Grey&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;James Bond&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Jane Porter&#39;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">registered_on</span><span class=\"o\">=</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">())</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Get counts for each value of account_type</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">regular</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">REGULAR</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">gold</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">GOLD</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">platinum</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s1\">&#39;pk&#39;</span><span class=\"p\">,</span> <span class=\"nb\">filter</span><span class=\"o\">=</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"n\">Client</span><span class=\"o\">.</span><span class=\"n\">PLATINUM</span><span class=\"p\">)),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;regular&#39;: 2, &#39;gold&#39;: 1, &#39;platinum&#39;: 3}</span>\n</code></pre></div>\n<p>Cet agrégat produit une requête avec la syntaxe SQL 2003 <code class=\"docutils literal notranslate\"><span class=\"pre\">FILTER</span> <span class=\"pre\">WHERE</span></code> pour les bases de données qui la prennent en charge :</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">FILTER</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">regular</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">FILTER</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">gold</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"s1\">&#39;id&#39;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"n\">FILTER</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"k\">WHERE</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">platinum</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">clients</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Pour les autres bases de données, cet effet est émulé à l’aide d’une instruction <code class=\"docutils literal notranslate\"><span class=\"pre\">CASE</span></code>:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"SQL code\"><code><span class=\"k\">SELECT</span><span class=\"w\"> </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">regular</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">gold</span><span class=\"p\">,</span>\n<span class=\"w\">       </span><span class=\"k\">count</span><span class=\"p\">(</span><span class=\"k\">CASE</span><span class=\"w\"> </span><span class=\"k\">WHEN</span><span class=\"w\"> </span><span class=\"n\">account_type</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"w\"> </span><span class=\"k\">THEN</span><span class=\"w\"> </span><span class=\"n\">id</span><span class=\"w\"> </span><span class=\"k\">ELSE</span><span class=\"w\"> </span><span class=\"k\">null</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"k\">as</span><span class=\"w\"> </span><span class=\"n\">platinum</span>\n<span class=\"k\">FROM</span><span class=\"w\"> </span><span class=\"n\">clients</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>Les deux instructions SQL sont fonctionnellement équivalentes mais la variante <code class=\"docutils literal notranslate\"><span class=\"pre\">FILTER</span></code> plus explicite peut donner de meilleures performances.</p>\n</section>\n</section>","rootId":"conditional-expressions","toc":[{"title":"Les classes d’expressions conditionnelles","anchor":"the-conditional-expression-classes","children":[{"title":"When","anchor":"when","children":[]},{"title":"Case","anchor":"case","children":[]}]},{"title":"Requêtes avancées","anchor":"advanced-queries","children":[{"title":"Mise à jour conditionnelle","anchor":"conditional-update","children":[]},{"title":"Agrégation conditionnelle","anchor":"conditional-aggregation","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/2.1/ref/"},{"docname":"ref/models/index","title":"Modèles","url":"/fr/2.1/ref/models/"}],"prev":{"docname":"ref/models/expressions","title":"Expressions de requête","url":"/fr/2.1/ref/models/expressions/"},"next":{"docname":"ref/models/database-functions","title":"Fonctions de base de données","url":"/fr/2.1/ref/models/database-functions/"},"formats":{"html":"/fr/2.1/ref/models/conditional-expressions/","markdown":"/fr/2.1/ref/models/conditional-expressions.md","json":"/fr/2.1/ref/models/conditional-expressions.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/ref/models/conditional-expressions.txt","official":"https://docs.djangoproject.com/fr/2.1/ref/models/conditional-expressions/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}