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
指定された項目の分散
最終更新
役に立ちましたか?