Aggregate

クラス定義

class Aggregate(*expressions, output_field=None, distinct=False, filter=None, **extra)

django.db.modelsに定義されたクラス。

引数

Description

*expressions

参照するフィールド名を表す文字列、もしくはquery

output_field

戻り値で使うフィールド名

filter

フィルターに使うQ型のオブジェクト

**extra

SQL用の追加Contextを提供するためのKeyword引数

aggregateとは集計する、集約するという意味。 文字通り、指定されたテーブルに対して集計作業を行う。

モデル名.objects.all().aggregate、 もしくはall()を省略したモデル名.objects.aggregateが基本形。

基本的な使い方

項目を指定しただけのシンプルな形。

辞書型のオブジェクトが戻り値になっている。特に指定しなかった場合、オブジェクトのkeyは下記の通り’指定したフィールド__メソッド名’となる。

>>> from django.db.models import Avg
>>> Book.objects.all().aggregate(Avg('price'))
{'price__avg': 34.35}

output_fieldに、key値を指定することもできる。

>>> Book.objects.aggregate(average_price=Avg('price'))
{'average_price': 34.35}

複数の集計作業

メソッドを複数指定することで、同時に集計を行うことができる。

>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
{'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

集計値を使った計算

下記は最大値を返すMaxメソッドと、平均値を返すAvgメソッドの差分の結果をprice_diffとして求めている。

>>> from django.db.models import FloatField
>>> Book.objects.aggregate(
...     price_diff=Max('price', output_field=FloatField()) - Avg('price'))
{'price_diff': 46.85}

Aggregateで利用可能な基本的な集計メソッド一覧

Method

Default alias

Description

Avg

<field>__avg

指定された項目の平均値

Count

<field>__count

指定された項目の数

Max

<field>__max

指定された項目の最大値

Min

<field>__min

指定された項目の最小値

StdDev

<field>__stddev

指定された項目の標準偏差

Sum

<field>__sum

指定された項目の合計値

Variance

<field>__variance

指定された項目の分散

最終更新

役に立ちましたか?