{"title":"Comhiomlánú","version":"6.0","locale":"ga","docname":"topics/db/aggregation","url":"/ga/6.0/topics/db/aggregation/","canonical":"https://djangodocs.dev/ga/6.0/topics/db/aggregation/","summary":"Chuir an treoir ábhair ar:doc: API teastarbhaithe bunachar sonraí Django síos ar an mbealach is féidir leat ceisteanna Django a úsáid a chruthaíonn, a aisghabhann,…","html":"<h1>Comhiomlánú<a class=\"heading-anchor\" href=\"#aggregation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Chuir an treoir ábhair ar:doc: API teastarbhaithe bunachar sonraí Django síos ar an mbealach is féidir leat ceisteanna Django a úsáid a chruthaíonn, a aisghabhann, a nuashon&lt;/topics/db/queries&gt; rú agus a scriosann rudaí aonair. Mar sin féin, uaireanta beidh ort luachanna a dhíorthaítear a aisghabháil trí bhailiúchán rudaí a achoimriú nó <em>a chomhthóiriú</em>. Déanann an treoir ábhair seo cur síos ar na bealaí is féidir luachanna comhiomlána a ghiniúint agus a thabhairt ar ais ag baint</p>\n<p>Le linn na treoir seo, déanfaimid tagairt do na samhlacha seo a leanas. Úsáidtear na samhlacha seo chun an fardal do shraith siopaí leabhar ar líne a rianú:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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 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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Author</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\">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\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">age</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Publisher</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\">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\">300</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Book</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\">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\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">pages</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">price</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DecimalField</span><span class=\"p\">(</span><span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"n\">rating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">()</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Author</span><span class=\"p\">)</span>\n    <span class=\"n\">publisher</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publisher</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">pubdate</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Store</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\">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\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">books</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"n\">Book</span><span class=\"p\">)</span>\n</code></pre></div>\n<section id=\"cheat-sheet\">\n<h2>Bileog cheat<a class=\"heading-anchor\" href=\"#cheat-sheet\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ar deifir? Seo conas ceisteanna comhiomlán coitianta a dhéanamh, ag glacadh leis na samhlacha thuas:</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=\"go\"># Total number of books.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"go\">2452</span>\n\n<span class=\"go\"># Total number of books with publisher=BaloneyPress</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">publisher__name</span><span class=\"o\">=</span><span class=\"s2\">&quot;BaloneyPress&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"go\">73</span>\n\n<span class=\"go\"># Average price across all books, provide default to be returned instead</span>\n<span class=\"go\"># of None if no books exist.</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\">Avg</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;price__avg&#39;: 34.35}</span>\n\n<span class=\"go\"># Max price across all books, provide default to be returned instead of</span>\n<span class=\"go\"># None if no books exist.</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\">Max</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Max</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;price__max&#39;: Decimal(&#39;81.20&#39;)}</span>\n\n<span class=\"go\"># Difference between the highest priced book and the average price of all books.</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\">FloatField</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</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\">price_diff</span><span class=\"o\">=</span><span class=\"n\">Max</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">,</span> <span class=\"n\">output_field</span><span class=\"o\">=</span><span class=\"n\">FloatField</span><span class=\"p\">())</span> <span class=\"o\">-</span> <span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"go\">{&#39;price_diff&#39;: 46.85}</span>\n\n<span class=\"go\"># All the following queries involve traversing the Book&lt;-&gt;Publisher</span>\n<span class=\"go\"># foreign key relationship backwards.</span>\n\n<span class=\"go\"># Each publisher, each with a count of books as a &quot;num_books&quot; attribute.</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\">pubs</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_books</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pubs</span>\n<span class=\"go\">&lt;QuerySet [&lt;Publisher: BaloneyPress&gt;, &lt;Publisher: SalamiPress&gt;, ...]&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pubs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">num_books</span>\n<span class=\"go\">73</span>\n\n<span class=\"go\"># Each publisher, with a separate count of books with a rating above and below 5</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\">Q</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">above_5</span> <span class=\"o\">=</span> <span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</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\">book__rating__gt</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\">below_5</span> <span class=\"o\">=</span> <span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</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\">book__rating__lte</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\">pubs</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">below_5</span><span class=\"o\">=</span><span class=\"n\">below_5</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">above_5</span><span class=\"o\">=</span><span class=\"n\">above_5</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pubs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">above_5</span>\n<span class=\"go\">23</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pubs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">below_5</span>\n<span class=\"go\">12</span>\n\n<span class=\"go\"># The top 5 publishers, in order by number of books.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pubs</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_books</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;-num_books&quot;</span><span class=\"p\">)[:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pubs</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">num_books</span>\n<span class=\"go\">1323</span>\n</code></pre></div>\n</section>\n<section id=\"generating-aggregates-over-a-queryset\">\n<h2>Comhiomlánacha a ghiniúint thar <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code><a class=\"heading-anchor\" href=\"#generating-aggregates-over-a-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Soláthraíonn Django dhá bhealach chun comhiomlán a ghiniúint. Is é an chéad bhealach ná luachanna achoimre a ghiniúint thar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>iomlán. Mar shampla, abair gur mhaith leat meánphraghas na leabhar go léir atá ar fáil le díol a ríomh. Soláthraíonn comhréir fiosrúcháin Django bealach chun cur síos a dhéanamh ar shraith na leabhar go léir:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Is é an rud a theastaíonn uainn ná bealach chun luachanna achoimre a ríomh thar na rudaí a bhaineann leis an <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet`</span> <span class=\"pre\">seo.</span> <span class=\"pre\">Déantar</span> <span class=\"pre\">é</span> <span class=\"pre\">seo</span> <span class=\"pre\">trí</span> <span class=\"pre\">chlásal</span> <span class=\"pre\">``comhiomlán</span> <span class=\"pre\">()</span> <span class=\"pre\">``a</span> <span class=\"pre\">chur</span> <span class=\"pre\">leis</span> <span class=\"pre\">an</span> <span class=\"pre\">``QuerySet</span></code>:</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><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\">Avg</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;price__avg&#39;: 34.35}</span>\n</code></pre></div>\n<p>Tá an <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>all () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>iomarcach sa sampla seo, mar sin d'fhéadfaí é seo a shimpliú go:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;price__avg&#39;: 34.35}</span>\n</code></pre></div>\n<p>Déanann an argóint leis an gclásal <code class=\"docutils literal notranslate\"><span class=\"pre\">comhiomlán</span> <span class=\"pre\">()</span> <span class=\"pre\">``cur</span> <span class=\"pre\">síos</span> <span class=\"pre\">ar</span> <span class=\"pre\">an</span> <span class=\"pre\">luach</span> <span class=\"pre\">comhiomlán</span> <span class=\"pre\">a</span> <span class=\"pre\">theastaíonn</span> <span class=\"pre\">uainn</span> <span class=\"pre\">a</span> <span class=\"pre\">ríomh</span> <span class=\"pre\">-</span> <span class=\"pre\">sa</span> <span class=\"pre\">chás</span> <span class=\"pre\">seo,</span> <span class=\"pre\">meán</span> <span class=\"pre\">an</span> <span class=\"pre\">réimse</span> <span class=\"pre\">``praghas</span></code> ar an tsamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Leabhar</span></code>. &lt;aggregation-functions&gt;Is féidir liosta de na feidhmeanna comhiomlána atá ar fáil a fháil in:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>QuerySet tagairt <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<p>Is clásal teirminéil é <code class=\"docutils literal notranslate\"><span class=\"pre\">comhiomlán</span> <span class=\"pre\">()</span> <span class=\"pre\">``do</span> <span class=\"pre\">`QuerySet</span></code> a thugann foclóir de phéirí ainmluacha ar ais, nuair a ghairmtear é. Is aitheantóir é an t-ainm don luach comhiomlán; is é an luach an comhiomlán ríomhaithe. Gintear an t-ainm go huathoibríoch ó ainm an réimse agus ón bhfeidhm chomhiomlán. Más mian leat ainm a shonrú de láimh don luach comhiomlán, is féidir leat é sin a dhéanamh tríd an ainm sin a sholáthar nuair a shonraíonn tú an clásal comhiomlán:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">average_price</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;average_price&#39;: 34.35}</span>\n</code></pre></div>\n<p>Más mian leat níos mó ná comhiomlán amháin a ghiniúint, cuireann tú argóint eile leis an gclásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>comhiomlán () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Mar sin, dá mbeimis ag iarraidh uasphraghas agus íosta na leabhar go léir a fháil amach, eisíomar an cheist:</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><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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">Max</span><span class=\"p\">,</span> <span class=\"n\">Min</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">),</span> <span class=\"n\">Max</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">),</span> <span class=\"n\">Min</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;price__avg&#39;: 34.35, &#39;price__max&#39;: Decimal(&#39;81.20&#39;), &#39;price__min&#39;: Decimal(&#39;12.99&#39;)}</span>\n</code></pre></div>\n</section>\n<section id=\"generating-aggregates-for-each-item-in-a-queryset\">\n<h2>Comhiomlánacha a ghiniúint do gach mír i <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code><a class=\"heading-anchor\" href=\"#generating-aggregates-for-each-item-in-a-queryset\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Is é an dara bealach chun luachanna achoimre a ghiniúint ná achoimre neamhspleách a ghiniúint do gach réad in a:class: .QuerySet. Mar shampla, má tá liosta leabhair á aisghabháil agat, b'fhéidir gur mhaith leat a fháil amach cé mhéad údar a chuir le gach leabhar. Tá caidreamh go leor ag gach Leabhar leis an Údar; ba mhaith linn achoimre a dhéanamh ar an gcaidreamh seo do gach leabhar sa <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n<p>Is féidir achoimrí in aghaidh an rud a ghiniúint ag baint úsáide as an gclásal: meth: ~.queryset.annotate. Nuair a shonraítear clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>annotate () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, déanfar anótáil ar gach réad sa <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>QuerySet` leis na luachanna sonraithe.</p>\n<p>Tá comhréir na n-anótaí seo comhionann leis an gclásal: meth: ~.queryset.aggregate. Déanann gach argóint le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>annotate () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>cur síos ar chomhiomlán atá le ríomh. Mar shampla, chun leabhair a anótáil le líon na n-údar:</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=\"go\"># Build an annotated queryset</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\">q</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">))</span>\n<span class=\"go\"># Interrogate the first object in the queryset</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"go\">&lt;Book: The Definitive Guide to Django&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">authors__count</span>\n<span class=\"go\">2</span>\n<span class=\"go\"># Interrogate the second object in the queryset</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n<span class=\"go\">&lt;Book: Practical Django Projects&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">authors__count</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<p>Mar is amhlaidh le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>comhiomlán () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, díorthaítear an t-ainm don anótáil go huathoibríoch ó ainm na feidhme comhiomlán agus ainm an réimse atá á chomhiomlánú. Is féidir leat an t-ainm réamhshocraithe seo a shárú trí ainm a sholáthar nuair a shonraíonn tú an t-anótáil:</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><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">num_authors</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">num_authors</span>\n<span class=\"go\">1</span>\n</code></pre></div>\n<p>Murab ionann agus <code class=\"docutils literal notranslate\"><span class=\"pre\">comhiomlán</span> <span class=\"pre\">()</span> <span class=\"pre\">``,</span> <span class=\"pre\">`annotate</span> <span class=\"pre\">()</span></code> is clásal teirminéil <em>ní</em>. Is é <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> aschur an chlásal <code class=\"docutils literal notranslate\"><span class=\"pre\">annotate</span> <span class=\"pre\">()</span> <span class=\"pre\">``;</span> <span class=\"pre\">is</span> <span class=\"pre\">féidir</span> <span class=\"pre\">an</span> <span class=\"pre\">`QuerySet</span></code> seo a mhodhnú ag baint úsáide as aon oibríocht <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> eile, lena n-áirítear <code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span> <span class=\"pre\">()</span></code>, ord_by () `, nó fiú glaonna breise chuig <code class=\"docutils literal notranslate\"><span class=\"pre\">annotate</span> <span class=\"pre\">()</span></code>.</p>\n<section id=\"combining-multiple-aggregations\">\n<span id=\"id1\"></span><h3>Comhiomlánú iolracha a chur<a class=\"heading-anchor\" href=\"#combining-multiple-aggregations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>&lt;10060&gt;Comhiomlánú iolracha a chomhcheangal le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>annotate () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>beidh: ticket: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>na torthaí míchearta mar úsáidtear comhpháirteanna in ionad fo-cheisteanna:</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><span class=\"n\">book</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">book</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">book</span><span class=\"o\">.</span><span class=\"n\">store_set</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n<span class=\"go\">3</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">),</span> <span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;store&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">authors__count</span>\n<span class=\"go\">6</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">store__count</span>\n<span class=\"go\">6</span>\n</code></pre></div>\n<p>Maidir le formhór na gcomhiomlánaithe, níl aon bhealach ann chun an fhadhb seo a sheachaint, áfach, tá paraiméadar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>difriúil <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ag comhiomlán:class: ~django.db.models.count a d'fhéadfadh cabhrú le:</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><span class=\"n\">q</span> <span class=\"o\">=</span> <span class=\"n\">Book</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\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">,</span> <span class=\"n\">distinct</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;store&quot;</span><span class=\"p\">,</span> <span class=\"n\">distinct</span><span class=\"o\">=</span><span class=\"kc\">True</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\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">authors__count</span>\n<span class=\"go\">2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">q</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">store__count</span>\n<span class=\"go\">3</span>\n</code></pre></div>\n<aside class=\"admonition-if-in-doubt-inspect-the-sql-query admonition\">\n<p class=\"admonition-title\">Má tá amhras ort, déan iniúchadh ar an gceist SQL!</p>\n<p>D'fhonn tuiscint a fháil ar cad a tharlaíonn i d'fhiosrúchán, smaoinigh ar mhaoin <code class=\"docutils literal notranslate\"><span class=\"pre\">fiosraithe</span></code> de do QuerySet a iniúchadh.</p>\n</aside>\n</section>\n</section>\n<section id=\"joins-and-aggregates\">\n<h2>Comhcheangail agus comhiomlánaithe<a class=\"heading-anchor\" href=\"#joins-and-aggregates\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Go dtí seo, déileálamar le comhiomlánaithe thar réimsí a bhaineann leis an tsamhail atá á cheistiú. Mar sin féin, uaireanta bainfidh an luach a theastaíonn uait a chomhiomlánú le samhail a bhaineann leis an tsamhail atá á fhiosrú agat.</p>\n<p>Agus an réimse atá le comhiomlánú a shonrú i bhfeidhm chomhiomlán, ligfidh Django duit an chéanna a úsáid: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>notáil béim dúbailte &lt;field-lookups-intro&gt;`a úsáidtear agus tú ag tagairt do réimsí gaolmhara i scagairí. Déanfaidh Django ansin láimhseáil le haon chomhcheangail tábla atá ag teastáil chun an luach gaolmhar a aisghabháil</p>\n<p>Mar shampla, chun raon praghsanna na leabhar a thairgtear i ngach siopa a fháil, d'fhéadfá an anótáil a úsáid:</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><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\">Max</span><span class=\"p\">,</span> <span class=\"n\">Min</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Store</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">min_price</span><span class=\"o\">=</span><span class=\"n\">Min</span><span class=\"p\">(</span><span class=\"s2\">&quot;books__price&quot;</span><span class=\"p\">),</span> <span class=\"n\">max_price</span><span class=\"o\">=</span><span class=\"n\">Max</span><span class=\"p\">(</span><span class=\"s2\">&quot;books__price&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Insíonn sé seo do Django an tsamhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Store</span></code> a aisghabháil, páirt a ghlacadh (tríd an gcaidreamh go leor) leis an tsamhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Leabhar <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, agus comhiomlánú ar réimse praghsanna an tsamhail leabhar chun luach íosta agus uasta a tháirgeadh.</p>\n<p>Tá feidhm ag na rialacha céanna maidir leis an gclásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>comhiomlán () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>. Dá dteastaíonn uait an praghas is ísle agus is airde d'aon leabhar atá ar fáil le díol in aon cheann de na siopaí a fháil, d'fhéadfá an comhiomlán a úsáid:</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><span class=\"n\">Store</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">min_price</span><span class=\"o\">=</span><span class=\"n\">Min</span><span class=\"p\">(</span><span class=\"s2\">&quot;books__price&quot;</span><span class=\"p\">),</span> <span class=\"n\">max_price</span><span class=\"o\">=</span><span class=\"n\">Max</span><span class=\"p\">(</span><span class=\"s2\">&quot;books__price&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Is féidir le slabhraí a bheith chomh domhain agus is gá duit. Mar shampla, chun aois an údair is óige d'aon leabhar atá ar fáil le díol a bhaint, d'fhéadfá an cheist a eisiúint:</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><span class=\"n\">Store</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">youngest_age</span><span class=\"o\">=</span><span class=\"n\">Min</span><span class=\"p\">(</span><span class=\"s2\">&quot;books__authors__age&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<section id=\"following-relationships-backwards\">\n<h3>Ag leanúint caidrimh ar ais<a class=\"heading-anchor\" href=\"#following-relationships-backwards\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ar bhealach cosúil le:ref: lookups-that-span-reachships, is féidir le comhiomlánú agus anótaí ar réimsí samhlacha nó samhlacha a bhaineann leis an gceann atá á fhiosrú agat caidrimh “droim” a bheith san áireamh. Úsáidtear ainm beaga samhlacha gaolmhara agus béim dhúbailte anseo freisin.</p>\n<p>Mar shampla, is féidir linn iarraidh ar gach foilsitheoir, a bhfuil anótáil acu lena gcuntair stoc leabhar iomlána faoi seach (tabhair faoi deara conas a úsáidimid <code class=\"docutils literal notranslate\"><span class=\"pre\">`leabhar</span></code> chun an <code class=\"docutils literal notranslate\"><span class=\"pre\">Foilsitheoir</span> <span class=\"pre\">``-&gt;</span> <span class=\"pre\">`Leabhar</span></code> eochair eachtrach droim a shonrú):</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><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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">Count</span><span class=\"p\">,</span> <span class=\"n\">Min</span><span class=\"p\">,</span> <span class=\"n\">Sum</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>(Beidh tréith bhreise ar a dtugtar <code class=\"docutils literal notranslate\"><span class=\"pre\">book__count</span></code> ag gach Foilsitheoir ``sa `QuerySet` mar thoradh air.)</p>\n<p>Is féidir linn an leabhar is sine a iarraidh freisin d'aon cheann de na cinn atá á mbainistiú ag gach foilsitheoir:</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><span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">oldest_pubdate</span><span class=\"o\">=</span><span class=\"n\">Min</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__pubdate&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>(Beidh eochair ar a dtugtar <code class=\"docutils literal notranslate\"><span class=\"pre\">'oldest_pubdate'</span></code> ag an bhfoclóir mar thoradh air. Mura ndéanfaí aon ainm den sórt sin a shonrú, bheadh sé an <code class=\"docutils literal notranslate\"><span class=\"pre\">book__pubdate__min'</span></code> sách fada.)</p>\n<p>Ní bhaineann sé seo ach le heochracha eachtracha. Oibríonn sé freisin le caidreamh go leor. Mar shampla, is féidir linn gach údar a iarraidh, anótáilte le líon iomlán na leathanaigh ag smaoineamh ar na leabhair go léir atá (co-) údar an t-údar (tabhair faoi deara conas a úsáidimid <code class=\"docutils literal notranslate\"><span class=\"pre\">`leabhar</span></code> chun an <code class=\"docutils literal notranslate\"><span class=\"pre\">Údar</span></code> -&gt; Leabhar` a shonrú go leor hop):</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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">total_pages</span><span class=\"o\">=</span><span class=\"n\">Sum</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__pages&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>(Beidh tréith bhreise ar a dtugtar <code class=\"docutils literal notranslate\"><span class=\"pre\">total_pages</span></code> ag gach <code class=\"docutils literal notranslate\"><span class=\"pre\">Údar</span></code> sa QuerySet` mar thoradh air. Mura ndéanfaí aon ainm den sórt sin a shonrú, bheadh sé an <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>book__pages__sum <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>sách fada.)</p>\n<p>Nó iarr meánrátáil na leabhar go léir atá scríofa ag údar (í) atá againn ar chomhad:</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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">average_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__rating&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>(Beidh eochair ar a dtugtar <code class=\"docutils literal notranslate\"><span class=\"pre\">'average_rating'</span></code> ag an bhfoclóir mar thoradh air. Mura ndéanfaí aon ainm den sórt sin a shonrú, bheadh sé an <code class=\"docutils literal notranslate\"><span class=\"pre\">book__rating__avg'</span></code> sách fada.)</p>\n</section>\n</section>\n<section id=\"aggregations-and-other-queryset-clauses\">\n<h2>Comhiomlánú agus clásail eile <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet`<a class=\"heading-anchor\" href=\"#aggregations-and-other-queryset-clauses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"filter-and-exclude\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">scagaire</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``eisiamh</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#filter-and-exclude\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir le comhiomlán páirt a ghlacadh i scagairí Beidh éifeacht ag aon <code class=\"docutils literal notranslate\"><span class=\"pre\">scagaire</span> <span class=\"pre\">()</span> <span class=\"pre\">``(nó</span> <span class=\"pre\">``eisiamh</span> <span class=\"pre\">()</span></code>) a chuirtear i bhfeidhm ar ghnáthréimsí samhlacha srian ar na rudaí a mheastar lena chomhiomlánú.</p>\n<p>Nuair a úsáidtear é le clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>annotate () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>, tá éifeacht ag scagaire srian ar na rudaí a ríomhtar anótáil dóibh. Mar shampla, is féidir leat liosta anótaithe a ghiniúint de na leabhair go léir a bhfuil teideal acu ag tosú le “Django” ag baint úsáide as an bhfiosrú:</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><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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Django&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Nuair a úsáidtear é le clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>comhiomlán () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, tá éifeacht ag scagaire srian ar na rudaí a ríomhtar an comhiomlán orthu. Mar shampla, is féidir leat meánphraghas gach leabhar a ghiniúint le teideal a thosaíonn le “Django” ag baint úsáide as an gceist:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;Django&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<section id=\"filtering-on-annotations\">\n<span id=\"id2\"></span><h4>Scagadh ar anótaí<a class=\"heading-anchor\" href=\"#filtering-on-annotations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Is féidir luachanna anótaithe a scagadh freisin. Is féidir an t-ailias don anótáil a úsáid i gclásail <code class=\"docutils literal notranslate\"><span class=\"pre\">scagaire</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``eisiamh</span> <span class=\"pre\">()</span></code> ar an mbealach céanna le haon réimse samhail eile.</p>\n<p>Mar shampla, chun liosta leabhair a ghiniúint a bhfuil níos mó ná údar amháin acu, is féidir leat an cheist a eisiúint:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">num_authors__gt</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Gineann an cheist seo tacar torthaí anótaithe, agus ansin gineann sé scagaire bunaithe ar an anótáil sin.</p>\n<p>Má theastaíonn dhá anótáil uait le dhá scagaire ar leithligh is féidir leat an argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">scagair</span></code> a úsáid le haon chomhiomlán. Mar shampla, chun liosta údair a ghiniúint le líon leabhair ardrátáilte:</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><span class=\"n\">highly_rated</span> <span class=\"o\">=</span> <span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</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\">book__rating__gte</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_books</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">),</span> <span class=\"n\">highly_rated_books</span><span class=\"o\">=</span><span class=\"n\">highly_rated</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Beidh na tréithe <code class=\"docutils literal notranslate\"><span class=\"pre\">num_books</span></code> agus <code class=\"docutils literal notranslate\"><span class=\"pre\">highly_rated_books</span></code> ag gach <code class=\"docutils literal notranslate\"><span class=\"pre\">Údar</span></code> sa tacar torthaí. Féach freis:ref: comhiomlánú coinníollach.</p>\n<aside class=\"admonition-choosing-between-filter-and-queryset-filter admonition\">\n<p class=\"admonition-title\">Roghnú idir <code class=\"docutils literal notranslate\"><span class=\"pre\">filter</span></code> agus <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet.Filter () ``</p>\n<p>Seachain an argóint <code class=\"docutils literal notranslate\"><span class=\"pre\">scagair</span></code> a úsáid le anótáil nó comhiomlánú amháin. Tá sé níos éifeachtaí <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.filter</span> <span class=\"pre\">()</span> <span class=\"pre\">``a</span> <span class=\"pre\">úsáid</span> <span class=\"pre\">chun</span> <span class=\"pre\">sraitheanna</span> <span class=\"pre\">a</span> <span class=\"pre\">eisiamh.</span> <span class=\"pre\">Níl</span> <span class=\"pre\">an</span> <span class=\"pre\">argóint</span> <span class=\"pre\">comhiomlánaithe</span> <span class=\"pre\">``scagair</span></code> úsáideach ach amháin nuair a úsáidtear dhá chomhiomlánú nó níos mó thar an gcaidreamh céanna le coinníollacha éagsúla.</p>\n</aside>\n</section>\n<section id=\"order-of-annotate-and-filter-clauses\">\n<h4>Ordú clásail <code class=\"docutils literal notranslate\"><span class=\"pre\">anótáit</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``scagaire</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#order-of-annotate-and-filter-clauses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Agus ceist casta á fhorbairt ina mbaineann clásail <code class=\"docutils literal notranslate\"><span class=\"pre\">annotate</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">`scagaire</span> <span class=\"pre\">()</span></code> araon, tabhair aird ar leith ar an ord ina gcuirtear na clásail i bhfeidhm ar an <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>.</p>\n<p>Nuair a chuirtear clásal <code class=\"docutils literal notranslate\"><span class=\"pre\">annotate</span> <span class=\"pre\">()</span> <span class=\"pre\">``i</span> <span class=\"pre\">bhfeidhm</span> <span class=\"pre\">ar</span> <span class=\"pre\">cheist,</span> <span class=\"pre\">ríomhtar</span> <span class=\"pre\">an</span> <span class=\"pre\">t-anótáil</span> <span class=\"pre\">thar</span> <span class=\"pre\">staid</span> <span class=\"pre\">na</span> <span class=\"pre\">fiosrúcháin</span> <span class=\"pre\">suas</span> <span class=\"pre\">go</span> <span class=\"pre\">dtí</span> <span class=\"pre\">an</span> <span class=\"pre\">pointe</span> <span class=\"pre\">ina</span> <span class=\"pre\">n-iarrtar</span> <span class=\"pre\">an</span> <span class=\"pre\">t-anótáil.</span> <span class=\"pre\">Is</span> <span class=\"pre\">é</span> <span class=\"pre\">an</span> <span class=\"pre\">tionchar</span> <span class=\"pre\">praiticiúil</span> <span class=\"pre\">a</span> <span class=\"pre\">bhaineann</span> <span class=\"pre\">leis</span> <span class=\"pre\">seo</span> <span class=\"pre\">nach</span> <span class=\"pre\">oibríochtaí</span> <span class=\"pre\">comutaitheacha</span> <span class=\"pre\">iad</span> <span class=\"pre\">``filter</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``annotate</span> <span class=\"pre\">()</span></code>.</p>\n<p>A thugtar:</p>\n<ul class=\"simple\">\n<li><p>Tá dhá leabhar ag Foilsitheoir A le rátálacha 4 agus 5.</p></li>\n<li><p>Tá dhá leabhar ag Foilsitheoir B le rátálacha 1 agus 4.</p></li>\n<li><p>Tá leabhar amháin ag Foilsitheoir C le rátáil 1.</p></li>\n</ul>\n<p>Seo sampla leis an comhiomlán <code class=\"docutils literal notranslate\"><span class=\"pre\">Count</span></code>:</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><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_books</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">,</span> <span class=\"n\">distinct</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">book__rating__gt</span><span class=\"o\">=</span><span class=\"mf\">3.0</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">num_books</span>\n<span class=\"go\">(&lt;Publisher: A&gt;, 2)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">num_books</span>\n<span class=\"go\">(&lt;Publisher: B&gt;, 2)</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">book__rating__gt</span><span class=\"o\">=</span><span class=\"mf\">3.0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_books</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;book&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">num_books</span>\n<span class=\"go\">(&lt;Publisher: A&gt;, 2)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">num_books</span>\n<span class=\"go\">(&lt;Publisher: B&gt;, 1)</span>\n</code></pre></div>\n<p>Tugann an dá cheist liosta foilsitheoirí a bhfuil leabhar amháin ar a laghad acu le rátáil níos mó ná 3.0, dá bhrí sin tá foilsitheoir C eisiata.</p>\n<p>Sa chéad cheist, bíonn an anótáil roimh an scagaire, mar sin níl aon éifeacht ag an scagaire ar an anótáil. &lt;combining-multiple-aggregations&gt;Teastaíonn <code class=\"docutils literal notranslate\"><span class=\"pre\">Distinct=True</span></code> chun a:ref: fabht ceiste` a sheachaint.</p>\n<p>Áireamh sa dara ceist líon na leabhar a bhfuil rátáil níos mó ná 3.0 acu do gach foilsitheoir. Tá an scagaire roimh an anótáil, mar sin cuireann an scagaire srian ar na rudaí a mheastar agus an anótáil á ríomh.</p>\n<p>Seo sampla eile leis an comhiomlán <code class=\"docutils literal notranslate\"><span class=\"pre\">Avg</span></code>:</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><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__rating&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">book__rating__gt</span><span class=\"o\">=</span><span class=\"mf\">3.0</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">avg_rating</span>\n<span class=\"go\">(&lt;Publisher: A&gt;, 4.5)  # (5+4)/2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">avg_rating</span>\n<span class=\"go\">(&lt;Publisher: B&gt;, 2.5)  # (1+4)/2</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">a</span><span class=\"p\">,</span> <span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">Publisher</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">book__rating__gt</span><span class=\"o\">=</span><span class=\"mf\">3.0</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">avg_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__rating&quot;</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\">a</span><span class=\"p\">,</span> <span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">avg_rating</span>\n<span class=\"go\">(&lt;Publisher: A&gt;, 4.5)  # (5+4)/2</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">b</span><span class=\"p\">,</span> <span class=\"n\">b</span><span class=\"o\">.</span><span class=\"n\">avg_rating</span>\n<span class=\"go\">(&lt;Publisher: B&gt;, 4.0)  # 4/1 (book with rating 1 excluded)</span>\n</code></pre></div>\n<p>Iarrann an chéad cheist meán-rátáil leabhair uile foilsitheora do fhoilsitheoirí a bhfuil leabhar amháin ar a laghad acu le rátáil níos mó ná 3.0. Iarrann an dara ceist meán rátálacha leabhar foilsitheora le haghaidh na rátálacha sin níos mó ná 3.0 amháin.</p>\n<p>Tá sé deacair a chur in iúl conas a aistríonn an ORM ceisteanna casta go ceisteanna SQL mar sin nuair a bhíonn amhras ort, iniúchadh ar an SQL le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>str (queryset.query) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>agus scríobh neart tástálacha.</p>\n</section>\n</section>\n<section id=\"order-by\">\n<h3><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ord_by () ``<a class=\"heading-anchor\" href=\"#order-by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir anótaí a úsáid mar bhunús le haghaidh ordú. Nuair a shainmhíníonn tú clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>order_by () , is féidir leis na comhiomláin a sholáthraíonn tú tagairt a dhéanamh d'aon ainm a shainmhínítear mar chuid de chlásal ``annotate () sa cheist.</p>\n<p>Mar shampla, chun “QuerySet” de leabhair a ordú de réir líon na n-údar a chuir leis an leabhar, d'fhéadfá an cheist seo a leanas a úsáid:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_authors&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"values\">\n<h3><a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>luachanna () ``<a class=\"heading-anchor\" href=\"#values\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>De ghnáth, gintear anótaí ar bhonn in aghaidh an réada - tabharfaidh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet` anótáilte toradh amháin ar ais do gach réad sa <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>QuerySet` bunaidh. Mar sin féin, nuair a úsáidtear clásal <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>luachanna () <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>chun srian a chur ar na colúin a chuirtear ar ais sa tacar torthaí, tá an modh chun anótaí a mheas beagán difriúil. In ionad toradh anótaithe a thabhairt ar ais do gach toradh sa “QuerySet” bunaidh, déantar na torthaí bunaidh a ghrúpáil de réir na gcomhcheangail uathúla de na réimsí a shonraítear sa chlásal <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">``</span></a>luachanna () <a href=\"#id11\"><span class=\"problematic\" id=\"id12\">``</span></a>. Cuirtear anótáil ar fáil ansin do gach grúpa uathúil; ríomhtar an t-anótáil thar gach ball den ghrúpa.</p>\n<p>Mar shampla, smaoinigh ar cheist údair a dhéanann iarracht meánrátáil leabhar a scríobh gach údar a fháil amach:</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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">average_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__rating&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Tabharfaidh sé seo toradh amháin ar ais do gach údar sa bhunachar sonraí, anótáilte lena meánrátáil leabhar.</p>\n<p>Mar sin féin, beidh an toradh beagán difriúil má úsáideann tú clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>luachanna () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>:</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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">average_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__rating&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Sa sampla seo, déanfar na húdair a ghrúpáil de réir ainm, mar sin ní gheobhaidh tú ach toradh anótaithe do gach ainm údair uath* uath*. Ciallaíonn sé seo má tá beirt údar agat leis an ainm céanna, déanfar a dtorthaí a chumasc i dtoradh amháin in aschur na fiosrúcháin; ríomhfar an meán mar an meán thar na leabhair a scríobh an dá údar.</p>\n<section id=\"order-of-annotate-and-values-clauses\">\n<h4>Ordú clásail <code class=\"docutils literal notranslate\"><span class=\"pre\">anótáit</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">`luachanna</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#order-of-annotate-and-values-clauses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Mar is amhlaidh leis an gclásal <code class=\"docutils literal notranslate\"><span class=\"pre\">scagaire</span> <span class=\"pre\">()</span> <span class=\"pre\">``,</span> <span class=\"pre\">tá</span> <span class=\"pre\">an</span> <span class=\"pre\">t-ord</span> <span class=\"pre\">ina</span> <span class=\"pre\">gcuirtear</span> <span class=\"pre\">clásail</span> <span class=\"pre\">``annotate</span> <span class=\"pre\">()</span></code> agus luachanna () `i bhfeidhm ar cheist suntasach. Má théann an clásal ``luachanna () ``roimh an `annotate ()`, ríomhfar an t-anótáil ag baint úsáide as an ngrúpáil a thuairiscítear leis an gclásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>luachanna () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Mar sin féin, má théann an clásal <code class=\"docutils literal notranslate\"><span class=\"pre\">annotate</span> <span class=\"pre\">()</span> <span class=\"pre\">``roimh</span> <span class=\"pre\">an</span> <span class=\"pre\">gclásal</span> <span class=\"pre\">``luachanna</span> <span class=\"pre\">()</span></code>, ginfear na nótaí thar an tacar fiosrúcháin iomlán. Sa chás seo, ní chuireann an clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>luachanna () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>srian ach ar na réimsí a ghintear ar aschur.</p>\n<p>Mar shampla, má aisiompaímid ord na clásal <code class=\"docutils literal notranslate\"><span class=\"pre\">luachanna</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``annotate</span> <span class=\"pre\">()</span></code> ónár sampla roimhe seo:</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><span class=\"n\">Author</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">average_rating</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;book__rating&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;average_rating&quot;</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Tabharfaidh sé seo toradh uathúil amháin anois do gach údar; áfach, ní thabharfar ach ainm an údair agus an anótáil meán_rating` ar ais sna sonraí aschuir.</p>\n<p>Ba chóir duit a thabhairt faoi deara freisin go bhfuil <code class=\"docutils literal notranslate\"><span class=\"pre\">meán_rating</span></code> san áireamh go sainráite sa liosta luachanna atá le tabhairt ar ais. Tá sé seo ag teastáil mar gheall ar ordú na clásal <code class=\"docutils literal notranslate\"><span class=\"pre\">luachanna</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``annotate</span> <span class=\"pre\">()</span></code>.</p>\n<p>Má théann an clásal <code class=\"docutils literal notranslate\"><span class=\"pre\">luachanna</span> <span class=\"pre\">()</span> <span class=\"pre\">``roimh</span> <span class=\"pre\">an</span> <span class=\"pre\">gclásal</span> <span class=\"pre\">``annotate</span> <span class=\"pre\">()</span></code>, cuirfear aon anótaí go huathoibríoch leis an tacar torthaí. Mar sin féin, má chuirtear an clásal luachanna () ``i bhfeidhm tar éis an chlásal ``annotate ()`, ní mór duit an colún comhiomlán a chur san áireamh go sainráite.</p>\n</section>\n<section id=\"interaction-with-order-by\">\n<span id=\"aggregation-ordering-interaction\"></span><h4>Idirghníomhaíocht le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>order_by () ``<a class=\"heading-anchor\" href=\"#interaction-with-order-by\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Úsáidtear réimsí a luaitear sa chuid <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by</span> <span class=\"pre\">()</span> <span class=\"pre\">``de</span> <span class=\"pre\">tacar</span> <span class=\"pre\">fiosrúcháin</span> <span class=\"pre\">agus</span> <span class=\"pre\">na</span> <span class=\"pre\">sonraí</span> <span class=\"pre\">aschuir</span> <span class=\"pre\">á</span> <span class=\"pre\">roghnú,</span> <span class=\"pre\">fiú</span> <span class=\"pre\">mura</span> <span class=\"pre\">sonraítear</span> <span class=\"pre\">iad</span> <span class=\"pre\">a</span> <span class=\"pre\">shlí</span> <span class=\"pre\">eile</span> <span class=\"pre\">sa</span> <span class=\"pre\">ghlao</span> <span class=\"pre\">``values</span> <span class=\"pre\">()</span></code>. Úsáidtear na réimsí breise seo chun torthaí “cosúil leis” a ghrúpáil le chéile agus is féidir leo a dhéanamh go bhfuil sraitheanna torthaí comhionanna ar leithligh Taispeánann sé seo, go háirithe, agus rudaí á chomhaireamh.</p>\n<p>Mar shampla, cuir i gcás go bhfuil samhail mar seo agat:</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\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Item</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\">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\">10</span><span class=\"p\">)</span>\n    <span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Más mian leat a chomhaireamh cé mhéad uair atá gach luach <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>sonraí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>ar leith le feiceáil i tacar ceisteanna ordaithe, b'fhéidir go dtriail a bhaint as seo:</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=\"n\">items</span> <span class=\"o\">=</span> <span class=\"n\">Item</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">)</span>\n<span class=\"c1\"># Warning: not quite correct!</span>\n<span class=\"n\">items</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>... a ghrúpáidh na rudaí <code class=\"docutils literal notranslate\"><span class=\"pre\">Mír</span> <span class=\"pre\">``de</span> <span class=\"pre\">réir</span> <span class=\"pre\">a</span> <span class=\"pre\">luachanna</span> <span class=\"pre\">coitianta</span> <span class=\"pre\">``sonra</span></code> agus ansin líon na luachanna <code class=\"docutils literal notranslate\"><span class=\"pre\">id</span></code> a chomhaireamh i ngach grúpa. Ach amháin nach n-oibreoidh sé go leor. Beidh páirt ag an ordú trí <code class=\"docutils literal notranslate\"><span class=\"pre\">ainm</span> <span class=\"pre\">``sa</span> <span class=\"pre\">ghrúpáil</span> <span class=\"pre\">freisin,</span> <span class=\"pre\">mar</span> <span class=\"pre\">sin</span> <span class=\"pre\">déanfar</span> <span class=\"pre\">an</span> <span class=\"pre\">ceist</span> <span class=\"pre\">seo</span> <span class=\"pre\">a</span> <span class=\"pre\">ghrúpáil</span> <span class=\"pre\">de</span> <span class=\"pre\">réir</span> <span class=\"pre\">péirí</span></code> (sonraí, ainm) <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ar leithligh, nach é an rud atá uait. Ina áit sin, ba cheart duit an tacar fiosrúcháin seo a thógáil:</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=\"n\">items</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"s2\">&quot;data&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;id&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>... aon ordú sa cheist a ghlanadh. D'fhéadfá ordú freisin trí, abair, <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>sonraí <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>gan aon éifeachtaí díobhálacha, ós rud é go bhfuil ról ag imirt sin cheana féin sa cheist.</p>\n<p>Tá an t-iompar seo mar an gcéanna leis an gcáipéisíocht Queryset dag:meth: ~django.db.models.query.queryset.Distinct agus tá an riail ghinearálta mar an gcéanna: de ghnáth ní theastaíonn uait colúin bhreise a imirt sa toradh, mar sin soiléir an t-ordú, nó ar a laghad cinnte go bhfuil sé srianta do na réimsí sin a roghnaíonn tú freisin i nglao <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>values () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>You might reasonably ask why Django doesn't remove the extraneous columns\nfor you. The main reason is consistency with <code class=\"docutils literal notranslate\"><span class=\"pre\">distinct()</span></code> and other\nplaces: Django <strong>never</strong> removes ordering constraints that you have\nspecified <em>explicitly with</em> <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> (and we can't change those\nother methods' behavior, as that would violate our\n<a class=\"reference internal\" href=\"/ga/6.0/misc/api-stability/\"><span class=\"doc\">Cobhsaíocht API</span></a> policy).</p>\n</aside>\n<aside class=\"admonition-default-ordering-not-applied-to-group-by admonition\">\n<p class=\"admonition-title\">Default ordering not applied to GROUP BY</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">GROUP</span> <span class=\"pre\">BY</span></code> queries (for example, those using <code class=\"docutils literal notranslate\"><span class=\"pre\">.values()</span></code> and\n<code class=\"docutils literal notranslate\"><span class=\"pre\">.annotate()</span></code>) don't use the model's default ordering.\nUse <code class=\"docutils literal notranslate\"><span class=\"pre\">order_by()</span></code> explicitly when a given order is needed.</p>\n</aside>\n</section>\n</section>\n<section id=\"aggregating-annotations\">\n<h3>Anótaí a chomhiomlánú<a class=\"heading-anchor\" href=\"#aggregating-annotations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Is féidir leat comhiomlán a ghiniúint freisin ar thoradh anótála. Nuair a shainmhíníonn tú clásal <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>comhiomlán () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, is féidir leis na comhiomláin a sholáthraíonn tú tagairt a thabhairt d'aon ainm a shainmhínítear mar chuid de chlásal <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>annotate () <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>sa cheist.</p>\n<p>Mar shampla, más mian leat meánlíon na n-údar in aghaidh an leabhair a ríomh déanann tú anótáil ar dtús an tacar leabhar le comhaireamh na n-údair, ansin comhiomlánú an údair sin, ag tagairt don réimse anótála:</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><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\">Avg</span><span class=\"p\">,</span> <span class=\"n\">Count</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_authors&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;num_authors__avg&#39;: 1.66}</span>\n</code></pre></div>\n</section>\n<section id=\"aggregating-on-empty-querysets-or-groups\">\n<h3>Comhiomlánú ar cheisteanna nó grúpaí folamh<a class=\"heading-anchor\" href=\"#aggregating-on-empty-querysets-or-groups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>&lt;aggregate-default&gt;Nuair a chuirtear comhiomlánú i bhfeidhm ar shraith fiosrúcháin nó grúpáil folamh, déanann an toradh réamhshocraithe ar a pharaiméadar: ref: réamhshocraithe', de ghnáth ``None`. Tarlaíonn an t-iompar seo toisc go bhfilleann feidhmeanna comhiomlánacha <code class=\"docutils literal notranslate\"><span class=\"pre\">NULL</span></code> nuair a fhaigheann an ceist forghníomhaithe</p>\n<p>Is féidir leat luach tuairisceáin a shonrú tríd an argóint: ref: default &lt;aggregate-default&gt;`a sholáthar don chuid is mó de na comhiomlánaithe. &lt;aggregate-default&gt;Mar sin féin, ós rud é nach dtacaíonn: class: `~django.db.models.count leis an argóint: ref: default `, fillfidh sé ``0` i gcónaí le haghaidh ceisteanna folmha nó grúpaí.</p>\n<p>Mar shampla, ag glacadh leis nach bhfuil <em>web</em> in ainm ar aon leabhar, ag ríomh an praghas iomlán don tacar leabhar seo ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code> ós rud é nach bhfuil aon sraitheanna comhoiriúnaithe ann chun an comhiomlán:class: ~django.db.Models.sum a ríomh ar:</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><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\">Sum</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;web&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Sum</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&quot;price__sum&quot;: None}</span>\n</code></pre></div>\n<p>Mar sin féin, is féidir an argóint:ref: default &lt;aggregate-default&gt;`a shocrú agus tú ag glaoch ar: class: `~django.db.models.sum chun luach réamhshocraithe difriúil a thabhairt ar ais mura féidir aon leabhair a aimsiú:</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><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__contains</span><span class=\"o\">=</span><span class=\"s2\">&quot;web&quot;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Sum</span><span class=\"p\">(</span><span class=\"s2\">&quot;price&quot;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">))</span>\n<span class=\"go\">{&quot;price__sum&quot;: Decimal(&quot;0&quot;)}</span>\n</code></pre></div>\n<p>Faoin gcochall, cuirtear an argóint:ref: default &lt;aggregate-default&gt;`i bhfeidhm tríd an bhfeidhm chomhiomlán a fhilleadh le:class: `~django.db.models.functions.coalesce.</p>\n</section>\n<section id=\"aggregating-with-mysql-only-full-group-by-enabled\">\n<span id=\"aggregation-mysql-only-full-group-by\"></span><h3>Aggregating with MySQL <code class=\"docutils literal notranslate\"><span class=\"pre\">ONLY_FULL_GROUP_BY</span></code> enabled<a class=\"heading-anchor\" href=\"#aggregating-with-mysql-only-full-group-by-enabled\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When using the <code class=\"docutils literal notranslate\"><span class=\"pre\">values()</span></code> clause to group query results for annotations in\nMySQL with the <code class=\"docutils literal notranslate\"><span class=\"pre\">ONLY_FULL_GROUP_BY</span></code> SQL mode enabled, you may need to apply\n<a class=\"reference internal\" href=\"/ga/6.0/ref/models/querysets/#django.db.models.AnyValue\" title=\"django.db.models.AnyValue\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code></a> if the annotation includes a mix of\naggregate and non-aggregate expressions.</p>\n<p>Take the following example:</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><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\">Count</span><span class=\"p\">,</span> <span class=\"n\">Greatest</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span><span class=\"n\">greatest_pages</span><span class=\"o\">=</span><span class=\"n\">Greatest</span><span class=\"p\">(</span><span class=\"s2\">&quot;pages&quot;</span><span class=\"p\">,</span> <span class=\"mi\">600</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pages_per_author</span><span class=\"o\">=</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;greatest_pages&quot;</span><span class=\"p\">)</span> <span class=\"o\">/</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_authors&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;pages_per_author&quot;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>This creates groups of books based on the SQL column <code class=\"docutils literal notranslate\"><span class=\"pre\">GREATEST(pages,</span> <span class=\"pre\">600)</span></code>.\nOne unique group consists of books with 600 pages or less, and other unique\ngroups will consist of books with the same pages. The <code class=\"docutils literal notranslate\"><span class=\"pre\">pages_per_author</span></code>\nannotation is composed of aggregate and non-aggregate expressions,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">num_authors</span></code> is an aggregate expression while <code class=\"docutils literal notranslate\"><span class=\"pre\">greatest_page</span></code> isn't.</p>\n<p>Since the grouping is based on the <code class=\"docutils literal notranslate\"><span class=\"pre\">greatest_pages</span></code> expression, MySQL may be\nunable to determine that <code class=\"docutils literal notranslate\"><span class=\"pre\">greatest_pages</span></code> (used in the <code class=\"docutils literal notranslate\"><span class=\"pre\">pages_per_author</span></code>\nexpression) is functionally dependent on the grouped column. As a result, it\nmay raise an error like:</p>\n<div class=\"code-block\" data-language=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">OperationalError: (1055, &quot;Expression #2 of SELECT list is not in GROUP BY</span>\n<span class=\"x\">clause and contains nonaggregated column &#39;book_book.pages&#39; which is not</span>\n<span class=\"x\">functionally dependent on columns in GROUP BY clause; this is incompatible</span>\n<span class=\"x\">with sql_mode=only_full_group_by&quot;)</span>\n</code></pre></div>\n<p>To avoid this, you can wrap the non-aggregate expression with\n<a class=\"reference internal\" href=\"/ga/6.0/ref/models/querysets/#django.db.models.AnyValue\" title=\"django.db.models.AnyValue\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code></a>.</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><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\">Count</span><span class=\"p\">,</span> <span class=\"n\">Greatest</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">Book</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">greatest_pages</span><span class=\"o\">=</span><span class=\"n\">Greatest</span><span class=\"p\">(</span><span class=\"s2\">&quot;pages&quot;</span><span class=\"p\">,</span> <span class=\"mi\">600</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"n\">num_authors</span><span class=\"o\">=</span><span class=\"n\">Count</span><span class=\"p\">(</span><span class=\"s2\">&quot;authors&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>    <span class=\"n\">pages_per_author</span><span class=\"o\">=</span><span class=\"n\">AnyValue</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;greatest_pages&quot;</span><span class=\"p\">))</span> <span class=\"o\">/</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s2\">&quot;num_authors&quot;</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"s2\">&quot;pages_per_author&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">{&#39;pages_per_author__avg&#39;: 532.57143333}</span>\n</code></pre></div>\n<p>Other supported databases do not encounter the <code class=\"docutils literal notranslate\"><span class=\"pre\">OperationalError</span></code> in the\nexample above because they can detect the functional dependency. In general,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code> is useful when dealing with select list columns that involve\nnon-aggregate functions or complex expressions not recognized by the database\nas functionally dependent on the columns in the grouping clause.</p>\n<aside class=\"version-note version-changed\" data-version=\"6.0\">\n<p class=\"version-note-title\">Changed in Django 6.0</p><p>The <a class=\"reference internal\" href=\"/ga/6.0/ref/models/querysets/#django.db.models.AnyValue\" title=\"django.db.models.AnyValue\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnyValue</span></code></a> aggregate was added.</p>\n</aside>\n</section>\n</section>","rootId":"aggregation","toc":[{"title":"Bileog cheat","anchor":"cheat-sheet","children":[]},{"title":"Comhiomlánacha a ghiniúint thar QuerySet","anchor":"generating-aggregates-over-a-queryset","children":[]},{"title":"Comhiomlánacha a ghiniúint do gach mír i QuerySet","anchor":"generating-aggregates-for-each-item-in-a-queryset","children":[{"title":"Comhiomlánú iolracha a chur","anchor":"combining-multiple-aggregations","children":[]}]},{"title":"Comhcheangail agus comhiomlánaithe","anchor":"joins-and-aggregates","children":[{"title":"Ag leanúint caidrimh ar ais","anchor":"following-relationships-backwards","children":[]}]},{"title":"Comhiomlánú agus clásail eile ``QuerySet`","anchor":"aggregations-and-other-queryset-clauses","children":[{"title":"scagaire () ``agus ``eisiamh ()","anchor":"filter-and-exclude","children":[{"title":"Scagadh ar anótaí","anchor":"filtering-on-annotations","children":[]},{"title":"Ordú clásail anótáit () ``agus ``scagaire ()","anchor":"order-of-annotate-and-filter-clauses","children":[]}]},{"title":"``ord_by () ``","anchor":"order-by","children":[]},{"title":"``luachanna () ``","anchor":"values","children":[{"title":"Ordú clásail anótáit () ``agus `luachanna ()","anchor":"order-of-annotate-and-values-clauses","children":[]},{"title":"Idirghníomhaíocht le ``order_by () ``","anchor":"interaction-with-order-by","children":[]}]},{"title":"Anótaí a chomhiomlánú","anchor":"aggregating-annotations","children":[]},{"title":"Comhiomlánú ar cheisteanna nó grúpaí folamh","anchor":"aggregating-on-empty-querysets-or-groups","children":[]},{"title":"Aggregating with MySQL ONLY_FULL_GROUP_BY enabled","anchor":"aggregating-with-mysql-only-full-group-by-enabled","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.0/topics/"},{"docname":"topics/db/index","title":"Samhlacha agus bunachair sonraí","url":"/ga/6.0/topics/db/"}],"prev":{"docname":"topics/db/queries","title":"Ceisteanna a dhéanamh","url":"/ga/6.0/topics/db/queries/"},"next":{"docname":"topics/db/search","title":"Cuardach","url":"/ga/6.0/topics/db/search/"},"formats":{"html":"/ga/6.0/topics/db/aggregation/","markdown":"/ga/6.0/topics/db/aggregation.md","json":"/ga/6.0/topics/db/aggregation.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/db/aggregation.txt","official":"https://docs.djangoproject.com/ga/6.0/topics/db/aggregation/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}