Aggregationを使う - 基本編

前提として

Django 1.1pre(revision 9742)以降から使える機能です。

Aggregationとは

QuerySetからAvg, Sum, Max, Mix, Countを算出します。
以前は自作しないと実現しませんでした。この機能だけでもバージョンアップをする価値があるのではないでしょうか。

model作成

ベースのモデルを作成します。

from django.db import models
class Book(models.Model):
    title = models.CharField(max_length = 100)
    price = models.IntegerField()

Aggregationを試す

shellモードで確認します。

manage.py shell

下準備

>>>from appname.models import Book
>>>Book.objects.create(title = 'Django x Python', price = 2079)
>>>Book.objects.create(title = u'開発のプロが教える標準Django完全解説 - Webアプリケーションフレームワーク', price = 4410)
>>>from django.db.models import Avg, Max, Min, Count, Sum

平均(Avg)を取得

>>>Book.objects.aggregate(Avg('price')
{'price__avg': 3244.5}

最大(Max)と最小(Min)を取得

>>>Book.objects.aggregate(Max('price'), Min('price'))
{'price__max': 4410, 'price__min': 2079}

合計(Sum)を取得

>>>Book.objects.aggregate(Sum('price'))
{'price__sum': 6489}

カウント(Count)を取得

>>>Book.objects.aggregate(Count('price'))
{'price__count': 2}

便利です :-)

twitter 2009-04-10 18:35:51.266578

関連ページ

Recent Updates

URLConf Tip 01 - キャプチャの有無にかかわらず同一のviewで処理する
Markdownの入力補助"wmd"をAdmin siteで使う
ModelFormでfieldのwidgetを変更する
動的なformを作る 6 - Dynamic Inline Admin site編
Formsetsを使う3 - inlineformset_factory編
動的なformを作る 5 - django-dynamic-formset編
Formクラスからメディアを定義する
複数のmodelを結合する 2 - Proxy model編
複数のmodelを結合する 1
ModelFormでfieldの表示順番を変える
Admin siteのwidgetを個別に変更する
formfield_overridesを使ってAdmin siteのwidgetを変更する
Admin siteのlist_displayをカスタマイズする - リンク編
Admin siteのlist_displayをカスタマイズする - 基本編
Admin siteのTextareaの高さを自在に変更する - admin.py編