Djangoでgroup byした結果のMaxもしくはMinの値を取りたいとき
今回はDjangoでgroup byした結果のMaxもしくはMinの値を取りたいときどのようにすれば良いのかについてご紹介いたします。
Djangoでgroup byした結果のMaxもしくはMinの値を取りたい時
例えば、Examというmodelがあり、その中でperson、scoreというカラムがあるとします。
このmodelについて、personでgroup byしてscoreのmaxの値を取りたいとしましょう。
その場合、次のように書けば条件に合ったデータを取得可能です。
1 2 3 |
from django.db.models.aggregates import Max test = Score.objects.all().values('person').annotate(max_score=Max('score')) |
しかし、実行結果は次のようになるので注意しましょう。
1 2 3 4 5 6 7 |
[ {'person': 1, 'max_score': 50}, {'person': 2, 'max_score': 77}, {'person': 3, 'max_score': 80}, {'person': 4, 'max_score': 43}, ... ] |
もしselect_relatedなどで外部キーの情報も一緒に取りたい場合は、OuterRefなどが必要かもしれません。
終わりに
今回はDjangoでgroup byした結果のMaxもしくはMinの値を取りたいときどのようにすれば良いのかについてご紹介いたしました。
ディスカッション
コメント一覧
まだ、コメントがありません