{"title":"Fonctions d’agrégation spécifiques à PostgreSQL","version":"5.1","locale":"fr","docname":"ref/contrib/postgres/aggregates","url":"/fr/5.1/ref/contrib/postgres/aggregates/","canonical":"https://djangodocs.dev/fr/5.1/ref/contrib/postgres/aggregates/","summary":"Ces fonctions sont disponibles dans le module django.contrib.postgres.aggregates. Elles sont décrites plus en détails dans la documentation PostgreSQL.","html":"<span id=\"postgresql-specific-aggregation-functions\"></span><h1>Fonctions d’agrégation spécifiques à PostgreSQL<a class=\"heading-anchor\" href=\"#module-django.contrib.postgres.aggregates\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Ces fonctions sont disponibles dans le module <code class=\"docutils literal notranslate\">django.contrib.postgres.aggregates</code>. Elles sont décrites plus en détails dans la <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/functions-aggregate.html\">documentation PostgreSQL</a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Toutes ces fonctions n’ont pas d’alias par défaut, il faut donc en indiquer un explicitement. Par exemple :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>SomeModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>arr<span class=\"o\">=</span>ArrayAgg<span class=\"p\">(</span><span class=\"s2\">&quot;somefield&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;arr&#39;: [0, 1, 2]}</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition-common-aggregate-options admonition\" role=\"note\">\n<p class=\"admonition-title\">Options communes d’agrégation</p>\n<p>Tous les agrégats possèdent le paramètre mot-clé <a class=\"reference internal\" href=\"/fr/5.1/ref/models/querysets/#aggregate-filter\"><span class=\"std std-ref\">filter</span></a> et doivent aussi avoir le paramètre mot-clé <a class=\"reference internal\" href=\"/fr/5.1/ref/models/querysets/#aggregate-default\"><span class=\"std std-ref\">default</span></a>.</p>\n</aside>\n<section id=\"general-purpose-aggregation-functions\">\n<h2>Fonctions d’agrégation d’ordre général<a class=\"heading-anchor\" href=\"#general-purpose-aggregation-functions\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"arrayagg\">\n<h3><code class=\"docutils literal notranslate\">ArrayAgg</code><a class=\"heading-anchor\" href=\"#arrayagg\"><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.contrib.postgres.aggregates.ArrayAgg\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">ArrayAgg</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">distinct<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ordering<span class=\"o\">=</span><span class=\"default_value\">()</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.ArrayAgg\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie une liste de valeurs, y compris nulles, concaténées dans un tableau, ou <code class=\"docutils literal notranslate\">default</code> s’il n’y a aucune valeur.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.ArrayAgg.distinct\">\n<span class=\"sig-name descname\">distinct</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.ArrayAgg.distinct\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un paramètre booléen facultatif qui détermine si les valeurs de tableau seront distinctes. <code class=\"docutils literal notranslate\">False</code> par défaut.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.ArrayAgg.ordering\">\n<span class=\"sig-name descname\">ordering</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.ArrayAgg.ordering\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une chaîne facultative d’un nom de champ (précédé d’un préfixe <code class=\"docutils literal notranslate\">&quot;-&quot;</code> facultatif pour indiquer un ordre décroissant) ou une expression (ou un tuple/liste de chaînes ou d’expressions) qui indique le tri des éléments de la liste résultante.</p>\n<p>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=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> F\n\nArrayAgg<span class=\"p\">(</span><span class=\"s2\">&quot;a_field&quot;</span><span class=\"p\">,</span> ordering<span class=\"o\">=</span><span class=\"s2\">&quot;-some_field&quot;</span><span class=\"p\">)</span>\nArrayAgg<span class=\"p\">(</span><span class=\"s2\">&quot;a_field&quot;</span><span class=\"p\">,</span> ordering<span class=\"o\">=</span>F<span class=\"p\">(</span><span class=\"s2\">&quot;some_field&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span>desc<span class=\"p\">())</span>\n</code></pre></div>\n</dd></dl>\n\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>Dans les anciennes versions, s’il n’y avait aucune ligne et que <code class=\"docutils literal notranslate\">default</code> n’était pas fourni, <code class=\"docutils literal notranslate\">ArrayAgg</code> renvoyait une liste vide au lieu de <code class=\"docutils literal notranslate\">None</code>. Si vous avez besoin de ce comportement, définissez explicitement <code class=\"docutils literal notranslate\">default</code> à <code class=\"docutils literal notranslate\">Value([])</code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"bitand\">\n<h3><code class=\"docutils literal notranslate\">BitAnd</code><a class=\"heading-anchor\" href=\"#bitand\"><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.contrib.postgres.aggregates.BitAnd\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BitAnd</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.BitAnd\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un entier <code class=\"docutils literal notranslate\">int</code> résultat de l’opération <code class=\"docutils literal notranslate\">AND</code> bit-à-bit de toutes les valeurs non nulles, ou <code class=\"docutils literal notranslate\">default</code> si toutes les valeurs sont nulles.</p>\n</dd></dl>\n\n</section>\n<section id=\"bitor\">\n<h3><code class=\"docutils literal notranslate\">BitOr</code><a class=\"heading-anchor\" href=\"#bitor\"><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.contrib.postgres.aggregates.BitOr\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BitOr</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.BitOr\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un entier <code class=\"docutils literal notranslate\">int</code> résultat de l’opération <code class=\"docutils literal notranslate\">OR</code> bit-à-bit de toutes les valeurs non nulles, ou <code class=\"docutils literal notranslate\">default</code> si toutes les valeurs sont nulles.</p>\n</dd></dl>\n\n</section>\n<section id=\"bitxor\">\n<h3><code class=\"docutils literal notranslate\">BitXor</code><a class=\"heading-anchor\" href=\"#bitxor\"><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.contrib.postgres.aggregates.BitXor\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BitXor</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.BitXor\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un entier <code class=\"docutils literal notranslate\">int</code> résultat de l’opération <code class=\"docutils literal notranslate\">XOR</code> bit-à-bit de toutes les valeurs non nulles, ou <code class=\"docutils literal notranslate\">default</code> si toutes les valeurs sont nulles. Nécessite PostgreSQL 14+.</p>\n</dd></dl>\n\n</section>\n<section id=\"booland\">\n<h3><code class=\"docutils literal notranslate\">BoolAnd</code><a class=\"heading-anchor\" href=\"#booland\"><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.contrib.postgres.aggregates.BoolAnd\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BoolAnd</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.BoolAnd\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\">True</code> si toutes les valeurs d’entrée sont vraies, <code class=\"docutils literal notranslate\">default</code> si toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoie <code class=\"docutils literal notranslate\">False</code>.</p>\n<p>Exemple d’utilisation :</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=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    body <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    published <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">()</span>\n    rank <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Q\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.aggregates</span> <span class=\"kn\">import</span> BoolAnd\n<span class=\"gp\">&gt;&gt;&gt; </span>Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>booland<span class=\"o\">=</span>BoolAnd<span class=\"p\">(</span><span class=\"s2\">&quot;published&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;booland&#39;: False}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>booland<span class=\"o\">=</span>BoolAnd<span class=\"p\">(</span>Q<span class=\"p\">(</span>rank__lt<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)))</span>\n<span class=\"go\">{&#39;booland&#39;: True}</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"boolor\">\n<h3><code class=\"docutils literal notranslate\">BoolOr</code><a class=\"heading-anchor\" href=\"#boolor\"><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.contrib.postgres.aggregates.BoolOr\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BoolOr</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.BoolOr\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\">True</code> si au moins une valeur d’entrée est vraie, <code class=\"docutils literal notranslate\">default</code> si toutes les valeurs sont nulles ou s’il n’y a pas de valeur, sinon renvoie <code class=\"docutils literal notranslate\">False</code>.</p>\n<p>Exemple d’utilisation :</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=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    body <span class=\"o\">=</span> models<span class=\"o\">.</span>TextField<span class=\"p\">()</span>\n    published <span class=\"o\">=</span> models<span class=\"o\">.</span>BooleanField<span class=\"p\">()</span>\n    rank <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"kn\">import</span> Q\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.aggregates</span> <span class=\"kn\">import</span> BoolOr\n<span class=\"gp\">&gt;&gt;&gt; </span>Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>boolor<span class=\"o\">=</span>BoolOr<span class=\"p\">(</span><span class=\"s2\">&quot;published&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;boolor&#39;: True}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>Comment<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>boolor<span class=\"o\">=</span>BoolOr<span class=\"p\">(</span>Q<span class=\"p\">(</span>rank__gt<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)))</span>\n<span class=\"go\">{&#39;boolor&#39;: False}</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"jsonbagg\">\n<h3><code class=\"docutils literal notranslate\">JSONBAgg</code><a class=\"heading-anchor\" href=\"#jsonbagg\"><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.contrib.postgres.aggregates.JSONBAgg\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">JSONBAgg</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expressions</em>, <em class=\"sig-param\">distinct<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ordering<span class=\"o\">=</span><span class=\"default_value\">()</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.JSONBAgg\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie les valeurs d’entrée sous forme de tableau <code class=\"docutils literal notranslate\">JSON</code>, ou <code class=\"docutils literal notranslate\">default</code> s’il n’y a aucune valeur. Vous pouvez interroger le résultat en utilisant les <a class=\"reference internal\" href=\"/fr/5.1/topics/db/queries/#std-fieldlookup-jsonfield.key\"><code class=\"xref std std-lookup docutils literal notranslate\">expressions de clé et d'indice</code></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.JSONBAgg.distinct\">\n<span class=\"sig-name descname\">distinct</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.JSONBAgg.distinct\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un paramètre booléen facultatif qui détermine si les valeurs de tableau seront distinctes. <code class=\"docutils literal notranslate\">False</code> par défaut.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.JSONBAgg.ordering\">\n<span class=\"sig-name descname\">ordering</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.JSONBAgg.ordering\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une chaîne facultative d’un nom de champ (précédé d’un préfixe <code class=\"docutils literal notranslate\">&quot;-&quot;</code> facultatif pour indiquer un ordre décroissant) ou une expression (ou un tuple/liste de chaînes ou d’expressions) qui indique le tri des éléments de la liste résultante.</p>\n<p>Les exemples sont les mêmes que pour <a class=\"reference internal\" href=\"#django.contrib.postgres.aggregates.ArrayAgg.ordering\" title=\"django.contrib.postgres.aggregates.ArrayAgg.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ArrayAgg.ordering</code></a>.</p>\n</dd></dl>\n\n<p>Exemple d’utilisation :</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=\"k\">class</span> <span class=\"nc\">Room</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    number <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span>unique<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">HotelReservation</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    room <span class=\"o\">=</span> models<span class=\"o\">.</span>ForeignKey<span class=\"p\">(</span><span class=\"s2\">&quot;Room&quot;</span><span class=\"p\">,</span> on_delete<span class=\"o\">=</span>models<span class=\"o\">.</span>CASCADE<span class=\"p\">)</span>\n    start <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n    end <span class=\"o\">=</span> models<span class=\"o\">.</span>DateTimeField<span class=\"p\">()</span>\n    requirements <span class=\"o\">=</span> models<span class=\"o\">.</span>JSONField<span class=\"p\">(</span>blank<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.aggregates</span> <span class=\"kn\">import</span> JSONBAgg\n<span class=\"gp\">&gt;&gt;&gt; </span>Room<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    requirements<span class=\"o\">=</span>JSONBAgg<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;hotelreservation__requirements&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        ordering<span class=\"o\">=</span><span class=\"s2\">&quot;-hotelreservation__start&quot;</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>filter<span class=\"p\">(</span>requirements__0__sea_view<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span>values<span class=\"p\">(</span><span class=\"s2\">&quot;number&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;requirements&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{&#39;number&#39;: 102, &#39;requirements&#39;: [</span>\n<span class=\"go\">    {&#39;parking&#39;: False, &#39;sea_view&#39;: True, &#39;double_bed&#39;: False},</span>\n<span class=\"go\">    {&#39;parking&#39;: True, &#39;double_bed&#39;: True}</span>\n<span class=\"go\">]}]&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>Dans les anciennes versions, s’il n’y avait aucune ligne et que <code class=\"docutils literal notranslate\">default</code> n’était pas fourni, <code class=\"docutils literal notranslate\">JSONBAgg</code> renvoyait une liste vide au lieu de <code class=\"docutils literal notranslate\">None</code>. Si vous avez besoin de ce comportement, définissez explicitement <code class=\"docutils literal notranslate\">default</code> à <code class=\"docutils literal notranslate\">Value([])</code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"stringagg\">\n<h3><code class=\"docutils literal notranslate\">StringAgg</code><a class=\"heading-anchor\" href=\"#stringagg\"><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.contrib.postgres.aggregates.StringAgg\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">StringAgg</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">delimiter</em>, <em class=\"sig-param\">distinct<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">ordering<span class=\"o\">=</span><span class=\"default_value\">()</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.StringAgg\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie les valeurs d’entrée concaténées dans une chaîne, séparées par la chaîne <code class=\"docutils literal notranslate\">delimiter</code>, ou <code class=\"docutils literal notranslate\">default</code> s’il n’y a aucune valeur.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.StringAgg.delimiter\">\n<span class=\"sig-name descname\">delimiter</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.StringAgg.delimiter\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Paramètre obligatoire. Doit être une chaîne.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.StringAgg.distinct\">\n<span class=\"sig-name descname\">distinct</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.StringAgg.distinct\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Un paramètre booléen facultatif qui détermine si les valeurs concaténées seront distinctes. <code class=\"docutils literal notranslate\">False</code> par défaut.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.StringAgg.ordering\">\n<span class=\"sig-name descname\">ordering</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.StringAgg.ordering\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Une chaîne facultative d’un nom de champ (précédé d’un préfixe <code class=\"docutils literal notranslate\">&quot;-&quot;</code> facultatif pour indiquer un ordre décroissant) ou une expression (ou un tuple/liste de chaînes ou d’expressions) qui indique le tri des éléments de la chaîne résultante.</p>\n<p>Les exemples sont les mêmes que pour <a class=\"reference internal\" href=\"#django.contrib.postgres.aggregates.ArrayAgg.ordering\" title=\"django.contrib.postgres.aggregates.ArrayAgg.ordering\"><code class=\"xref py py-attr docutils literal notranslate\">ArrayAgg.ordering</code></a>.</p>\n</dd></dl>\n\n<p>Exemple d’utilisation :</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=\"k\">class</span> <span class=\"nc\">Publication</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    title <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Article</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    headline <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    publications <span class=\"o\">=</span> models<span class=\"o\">.</span>ManyToManyField<span class=\"p\">(</span>Publication<span class=\"p\">)</span>\n</code></pre></div>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>article <span class=\"o\">=</span> Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>create<span class=\"p\">(</span>headline<span class=\"o\">=</span><span class=\"s2\">&quot;NASA uses Python&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>article<span class=\"o\">.</span>publications<span class=\"o\">.</span>create<span class=\"p\">(</span>title<span class=\"o\">=</span><span class=\"s2\">&quot;The Python Journal&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Publication: Publication object (1)&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>article<span class=\"o\">.</span>publications<span class=\"o\">.</span>create<span class=\"p\">(</span>title<span class=\"o\">=</span><span class=\"s2\">&quot;Science News&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;Publication: Publication object (2)&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.aggregates</span> <span class=\"kn\">import</span> StringAgg\n<span class=\"gp\">&gt;&gt;&gt; </span>Article<span class=\"o\">.</span>objects<span class=\"o\">.</span>annotate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    publication_names<span class=\"o\">=</span>StringAgg<span class=\"p\">(</span>\n<span class=\"gp\">... </span>        <span class=\"s2\">&quot;publications__title&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        delimiter<span class=\"o\">=</span><span class=\"s2\">&quot;, &quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>        ordering<span class=\"o\">=</span><span class=\"s2\">&quot;publications__title&quot;</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>values<span class=\"p\">(</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;publication_names&quot;</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [{</span>\n<span class=\"go\">    &#39;headline&#39;: &#39;NASA uses Python&#39;, &#39;publication_names&#39;: &#39;Science News, The Python Journal&#39;</span>\n<span class=\"go\">}]&gt;</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\" role=\"note\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>Dans les anciennes versions, s’il n’y avait aucune ligne et que <code class=\"docutils literal notranslate\">default</code> n’était pas fourni, <code class=\"docutils literal notranslate\">StringAgg</code> renvoyait une chaîne vide au lieu de <code class=\"docutils literal notranslate\">None</code>. Si vous avez besoin de ce comportement, définissez explicitement <code class=\"docutils literal notranslate\">default</code> à <code class=\"docutils literal notranslate\">Value(&quot;&quot;)</code>.</p>\n</aside>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"aggregate-functions-for-statistics\">\n<h2>Fonctions d’agrégation à but statistique<a class=\"heading-anchor\" href=\"#aggregate-functions-for-statistics\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"y-and-x\">\n<h3><code class=\"docutils literal notranslate\">y</code> et <code class=\"docutils literal notranslate\">x</code><a class=\"heading-anchor\" href=\"#y-and-x\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Les paramètres <code class=\"docutils literal notranslate\">y</code> et <code class=\"docutils literal notranslate\">x</code> de toutes ces fonctions peuvent être un nom de champ ou une expression renvoyant une donnée numérique. Les deux sont obligatoires.</p>\n</section>\n<section id=\"corr\">\n<h3><code class=\"docutils literal notranslate\">Corr</code><a class=\"heading-anchor\" href=\"#corr\"><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.contrib.postgres.aggregates.Corr\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">Corr</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.Corr\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie le coefficient de corrélation sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"covarpop\">\n<h3><code class=\"docutils literal notranslate\">CovarPop</code><a class=\"heading-anchor\" href=\"#covarpop\"><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.contrib.postgres.aggregates.CovarPop\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">CovarPop</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">sample<span class=\"o\">=</span><span class=\"default_value\">False</span></em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.CovarPop\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie la covariance de population sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.aggregates.CovarPop.sample\">\n<span class=\"sig-name descname\">sample</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.CovarPop.sample\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Facultatif. Par défaut, <code class=\"docutils literal notranslate\">CovarPop</code> renvoie la covariance de population générale. Cependant, si <code class=\"docutils literal notranslate\">sample=True</code>, la valeur renvoyée sera la covariance d’échantillon de population.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"regravgx\">\n<h3><code class=\"docutils literal notranslate\">RegrAvgX</code><a class=\"heading-anchor\" href=\"#regravgx\"><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.contrib.postgres.aggregates.RegrAvgX\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrAvgX</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrAvgX\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie la moyenne de la variable indépendante (<code class=\"docutils literal notranslate\">sum(x)/N</code>) sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"regravgy\">\n<h3><code class=\"docutils literal notranslate\">RegrAvgY</code><a class=\"heading-anchor\" href=\"#regravgy\"><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.contrib.postgres.aggregates.RegrAvgY\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrAvgY</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrAvgY\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie la moyenne de la variable dépendante (<code class=\"docutils literal notranslate\">sum(y)/N</code>) sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"regrcount\">\n<h3><code class=\"docutils literal notranslate\">RegrCount</code><a class=\"heading-anchor\" href=\"#regrcount\"><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.contrib.postgres.aggregates.RegrCount\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrCount</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrCount\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie un entier <code class=\"docutils literal notranslate\">int</code> correspondant au nombre de lignes d’entrée dans lesquelles les deux expressions ne sont pas nulles.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>Le paramètre <code class=\"docutils literal notranslate\">default</code> n’est pas pris en charge.</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"regrintercept\">\n<h3><code class=\"docutils literal notranslate\">RegrIntercept</code><a class=\"heading-anchor\" href=\"#regrintercept\"><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.contrib.postgres.aggregates.RegrIntercept\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrIntercept</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrIntercept\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie l’interception de l’axe y pour l’équation linéaire de la méthode des moindres carrés déterminée par les paires <code class=\"docutils literal notranslate\">(x, y)</code> sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"regrr2\">\n<h3><code class=\"docutils literal notranslate\">RegrR2</code><a class=\"heading-anchor\" href=\"#regrr2\"><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.contrib.postgres.aggregates.RegrR2\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrR2</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrR2\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returns the square of the correlation coefficient as a <code class=\"docutils literal notranslate\">float</code>, or\n<code class=\"docutils literal notranslate\">default</code> if there aren’t any matching rows.</p>\n</dd></dl>\n\n</section>\n<section id=\"regrslope\">\n<h3><code class=\"docutils literal notranslate\">RegrSlope</code><a class=\"heading-anchor\" href=\"#regrslope\"><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.contrib.postgres.aggregates.RegrSlope\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrSlope</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrSlope\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie l’inclinaison pour l’équation linéaire de la méthode des moindres carrés déterminée par les paires <code class=\"docutils literal notranslate\">(x, y)</code> sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"regrsxx\">\n<h3><code class=\"docutils literal notranslate\">RegrSXX</code><a class=\"heading-anchor\" href=\"#regrsxx\"><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.contrib.postgres.aggregates.RegrSXX\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrSXX</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrSXX\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\">sum(x^2) - sum(x)^2/N</code> (« somme des carrés » de la variable indépendante) sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"regrsxy\">\n<h3><code class=\"docutils literal notranslate\">RegrSXY</code><a class=\"heading-anchor\" href=\"#regrsxy\"><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.contrib.postgres.aggregates.RegrSXY\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrSXY</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrSXY\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\">sum(x*y) - sum(x) * sum(y)/N</code> (« somme des produits » de la variable indépendante multipliée par la variable dépendante) sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n<section id=\"regrsyy\">\n<h3><code class=\"docutils literal notranslate\">RegrSYY</code><a class=\"heading-anchor\" href=\"#regrsyy\"><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.contrib.postgres.aggregates.RegrSYY\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">RegrSYY</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">y</em>, <em class=\"sig-param\">x</em>, <em class=\"sig-param\">filter<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">default<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.aggregates.RegrSYY\"><span class=\"visually-hidden\">Lien vers cette définition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Renvoie <code class=\"docutils literal notranslate\">sum(y^2) - sum(y)^2/N</code> (« somme des carrés » de la variable dépendante) sous forme de nombre <code class=\"docutils literal notranslate\">float</code>, ou <code class=\"docutils literal notranslate\">default</code> si aucune ligne ne correspond.</p>\n</dd></dl>\n\n</section>\n</section>\n<section id=\"usage-examples\">\n<h2>Exemples d’utilisation<a class=\"heading-anchor\" href=\"#usage-examples\"><span class=\"visually-hidden\">Lien vers cette rubrique</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Nous allons utiliser cette table d’exemple :</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>| FIELD1 | FIELD2 | FIELD3 |\n|--------|--------|--------|\n|    foo |      1 |     13 |\n|    bar |      2 | (null) |\n|   test |      3 |     13 |\n</code></pre></div>\n<p>Voici quelques exemples de certaines des fonctions d’agrégation d’ordre général :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>TestModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>result<span class=\"o\">=</span>StringAgg<span class=\"p\">(</span><span class=\"s2\">&quot;field1&quot;</span><span class=\"p\">,</span> delimiter<span class=\"o\">=</span><span class=\"s2\">&quot;;&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;result&#39;: &#39;foo;bar;test&#39;}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>TestModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>result<span class=\"o\">=</span>ArrayAgg<span class=\"p\">(</span><span class=\"s2\">&quot;field2&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;result&#39;: [1, 2, 3]}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>TestModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>result<span class=\"o\">=</span>ArrayAgg<span class=\"p\">(</span><span class=\"s2\">&quot;field1&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;result&#39;: [&#39;foo&#39;, &#39;bar&#39;, &#39;test&#39;]}</span>\n</code></pre></div>\n<p>L’exemple suivant montre l’utilisation des fonctions d’agrégats pour les statistiques. Les mathématiques sous-jacentes ne sont pas expliquées (vous pouvez vous renseigner à ce sujet sur <a class=\"reference external\" href=\"https://fr.wikipedia.org/wiki/Régression_(statistiques)\">Wikipédia</a> par exemple) :</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span>TestModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>count<span class=\"o\">=</span>RegrCount<span class=\"p\">(</span>y<span class=\"o\">=</span><span class=\"s2\">&quot;field3&quot;</span><span class=\"p\">,</span> x<span class=\"o\">=</span><span class=\"s2\">&quot;field2&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;count&#39;: 2}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>TestModel<span class=\"o\">.</span>objects<span class=\"o\">.</span>aggregate<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    avgx<span class=\"o\">=</span>RegrAvgX<span class=\"p\">(</span>y<span class=\"o\">=</span><span class=\"s2\">&quot;field3&quot;</span><span class=\"p\">,</span> x<span class=\"o\">=</span><span class=\"s2\">&quot;field2&quot;</span><span class=\"p\">),</span> avgy<span class=\"o\">=</span>RegrAvgY<span class=\"p\">(</span>y<span class=\"o\">=</span><span class=\"s2\">&quot;field3&quot;</span><span class=\"p\">,</span> x<span class=\"o\">=</span><span class=\"s2\">&quot;field2&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;avgx&#39;: 2, &#39;avgy&#39;: 13}</span>\n</code></pre></div>\n</section>","rootId":"module-django.contrib.postgres.aggregates","toc":[{"title":"Fonctions d’agrégation d’ordre général","anchor":"general-purpose-aggregation-functions","children":[{"title":"ArrayAgg","anchor":"arrayagg","children":[]},{"title":"BitAnd","anchor":"bitand","children":[]},{"title":"BitOr","anchor":"bitor","children":[]},{"title":"BitXor","anchor":"bitxor","children":[]},{"title":"BoolAnd","anchor":"booland","children":[]},{"title":"BoolOr","anchor":"boolor","children":[]},{"title":"JSONBAgg","anchor":"jsonbagg","children":[]},{"title":"StringAgg","anchor":"stringagg","children":[]}]},{"title":"Fonctions d’agrégation à but statistique","anchor":"aggregate-functions-for-statistics","children":[{"title":"y et x","anchor":"y-and-x","children":[]},{"title":"Corr","anchor":"corr","children":[]},{"title":"CovarPop","anchor":"covarpop","children":[]},{"title":"RegrAvgX","anchor":"regravgx","children":[]},{"title":"RegrAvgY","anchor":"regravgy","children":[]},{"title":"RegrCount","anchor":"regrcount","children":[]},{"title":"RegrIntercept","anchor":"regrintercept","children":[]},{"title":"RegrR2","anchor":"regrr2","children":[]},{"title":"RegrSlope","anchor":"regrslope","children":[]},{"title":"RegrSXX","anchor":"regrsxx","children":[]},{"title":"RegrSXY","anchor":"regrsxy","children":[]},{"title":"RegrSYY","anchor":"regrsyy","children":[]}]},{"title":"Exemples d’utilisation","anchor":"usage-examples","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"Référence de l’API","url":"/fr/5.1/ref/"},{"docname":"ref/contrib/index","title":"Paquets contrib","url":"/fr/5.1/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/fr/5.1/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/fr/5.1/ref/contrib/postgres/"},"next":{"docname":"ref/contrib/postgres/constraints","title":"Contraintes de bases de données spécifiques à PostgreSQL","url":"/fr/5.1/ref/contrib/postgres/constraints/"},"formats":{"html":"/fr/5.1/ref/contrib/postgres/aggregates/","markdown":"/fr/5.1/ref/contrib/postgres/aggregates.md","json":"/fr/5.1/ref/contrib/postgres/aggregates.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/contrib/postgres/aggregates.txt","official":"https://docs.djangoproject.com/fr/5.1/ref/contrib/postgres/aggregates/","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","it","pt-br","ko","es","el","pl"]}