カテゴリ: Django 更新日: 2026/04/06

Django ORMで集計処理(Count・Sum)を完全解説!初心者でもわかるデータの数え方と合計

Django ORMで集計処理(Count・Sum)を行う基本
Django ORMで集計処理(Count・Sum)を行う基本

先生と生徒の会話形式で理解しよう

生徒

「Djangoでデータベースの件数や合計を出したいんですが、どうやるんですか?」

先生

「DjangoではORMという仕組みを使って、データベースを直接操作しなくても集計処理ができます。」

生徒

「集計処理って、そもそも何ですか?」

先生

「データの数を数えたり、金額を合計したりすることです。では、基本から順番に見ていきましょう。」

1. Django ORMの集計処理とは?

1. Django ORMの集計処理とは?
1. Django ORMの集計処理とは?

Django ORMの集計処理とは、データベースに保存されている情報をまとめて計算する仕組みです。たとえば「登録ユーザーは何人いるか」「注文金額の合計はいくらか」といった処理を、Pythonのコードだけで書けます。

ORMとは「データベースを表のように直接触らなくても操作できる仕組み」のことです。難しく感じるかもしれませんが、普段使っている名簿や家計簿を数える感覚に近いです。

2. 集計で使うCountとSumの基本

2. 集計で使うCountとSumの基本
2. 集計で使うCountとSumの基本

Django ORMでよく使う集計機能がCountSumです。Countは「件数を数える」、Sumは「数値を合計する」ためのものです。

スーパーで商品が何個あるか数えるのがCount、レジで合計金額を出すのがSumだと考えるとイメージしやすくなります。

3. Countでデータの件数を数える方法

3. Countでデータの件数を数える方法
3. Countでデータの件数を数える方法

まずはCountの使い方です。ここでは、ブログ記事モデルの記事数を数える例を見てみましょう。


from django.db.models import Count
from blog.models import Article

article_count = Article.objects.aggregate(Count('id'))
print(article_count)

{'id__count': 10}

この結果は「記事が10件ある」という意味です。aggregateは「全体をまとめて計算する」という役割を持っています。

4. 特定条件の件数をCountで取得する

4. 特定条件の件数をCountで取得する
4. 特定条件の件数をCountで取得する

条件をつけて件数を数えることもできます。たとえば「公開中の記事だけを数えたい」場合です。


from django.db.models import Count
from blog.models import Article

public_count = Article.objects.filter(is_public=True).count()
print(public_count)

7

これは「公開されている記事が7件ある」ことを表します。フィルターは、名簿から条件に合う人だけを抜き出す作業と同じです。

5. Sumで数値データを合計する方法

5. Sumで数値データを合計する方法
5. Sumで数値データを合計する方法

次にSumを使って合計を出してみます。ここでは、商品の価格を合計する例を考えます。


from django.db.models import Sum
from shop.models import Product

total_price = Product.objects.aggregate(Sum('price'))
print(total_price)

{'price__sum': 15000}

これは「全商品の価格を足した合計が15000」という意味です。電卓で全部足す代わりに、Djangoが自動で計算してくれます。

6. 条件付きでSumを使う場合

6. 条件付きでSumを使う場合
6. 条件付きでSumを使う場合

Sumも条件付きで使えます。たとえば「在庫がある商品の合計金額」を出したい場合です。


from django.db.models import Sum
from shop.models import Product

stock_sum = Product.objects.filter(stock__gt=0).aggregate(Sum('price'))
print(stock_sum)

{'price__sum': 9800}

stock__gt=0は「在庫が0より大きい」という意味です。難しい記号に見えますが、「条件指定」と覚えておけば大丈夫です。

7. CountとSumを使うときの注意点

7. CountとSumを使うときの注意点
7. CountとSumを使うときの注意点

集計結果は辞書形式で返ってきます。そのため、画面表示や計算に使うときは、キーを正しく指定する必要があります。

また、データが存在しない場合はNoneになることがあります。これは「結果が空」という意味なので、エラーではありません。

8. Django ORM集計処理の活用イメージ

8. Django ORM集計処理の活用イメージ
8. Django ORM集計処理の活用イメージ

Django ORMのCountとSumを使うことで、管理画面の統計表示や、売上確認、ユーザー数の把握などが簡単になります。

難しいSQLを書かなくても、Pythonのコードだけで安全にデータ集計ができる点が、Django ORMの大きな特徴です。初心者でも少しずつ慣れていけば、自然に使えるようになります。

まとめ

まとめ
まとめ

本記事では、Django ORMを使った集計処理について、CountとSumという基本かつ非常に重要な機能を中心に、初心者でも理解できるように段階的に解説してきました。Django ORMの集計処理は、データベースに保存されている大量のデータを効率よく整理し、件数を数えたり数値を合計したりするための仕組みです。SQLを直接書かなくても、Pythonのコードだけで安全かつ直感的に集計処理が行える点が大きな特徴です。

Countは「いくつあるか」を調べるための基本的な集計方法であり、ユーザー数、記事数、注文数など、Webアプリケーションでは非常によく使われます。Sumは「合計はいくらか」を求めるための集計方法で、金額、数量、ポイントなどの数値データを扱う場面で活躍します。これらは単体で使うだけでなく、filterと組み合わせることで「条件付き集計」が可能になり、実用的なデータ分析や管理画面の表示に直結します。

集計処理では、aggregateメソッドやcountメソッドを正しく使い分けることが重要です。aggregateは全体をまとめて計算し、結果を辞書形式で返します。一方でcountは件数のみをシンプルに整数で返すため、用途に応じて選ぶことでコードが読みやすくなります。また、集計結果がNoneになるケースも理解しておく必要があります。これはデータが存在しないことを示しているだけであり、エラーではありません。

Django ORMの集計処理を理解することは、データベース設計やモデル設計を考える上でも非常に役立ちます。どのカラムを数えるのか、どの数値を合計するのかを意識することで、より実践的で拡張しやすいアプリケーションを作れるようになります。初心者の方は、まずはCountとSumに慣れ、実際に小さなデータで試しながら理解を深めていくことが大切です。

集計処理のサンプルプログラム振り返り

ここで、記事内で学んだ集計処理をあらためて確認してみましょう。Django ORMでは、モデルクラスを通して直感的に集計処理を書けます。


from django.db.models import Count, Sum
from blog.models import Article
from shop.models import Product

# 記事の総件数を取得
article_count = Article.objects.aggregate(Count('id'))

# 公開中の記事件数を取得
public_count = Article.objects.filter(is_public=True).count()

# 商品価格の合計を取得
total_price = Product.objects.aggregate(Sum('price'))

# 在庫がある商品の価格合計を取得
stock_sum = Product.objects.filter(stock__gt=0).aggregate(Sum('price'))

{'id__count': 10}
7
{'price__sum': 15000}
{'price__sum': 9800}

このように、CountとSumを使うことで、件数確認や合計計算が非常に簡潔に書けます。実務では、管理画面のダッシュボード表示や、日別や月別の集計処理など、応用範囲は広がっていきます。

先生と生徒の振り返り会話

生徒

「CountとSumって、最初は難しそうだと思っていましたが、使い道がはっきりすると理解しやすいですね。」

先生

「そうですね。Django ORMの集計処理は、日常的な『数える』『足す』という感覚と同じなので、実例で考えると分かりやすいです。」

生徒

「filterと組み合わせることで、条件付きで集計できるのも便利だと思いました。」

先生

「その通りです。条件付き集計を覚えると、ユーザー数の把握や売上管理など、実際のWebアプリで必要な処理が一気に書けるようになります。」

生徒

「まずはCountとSumをしっかり使いこなして、少しずつ他の集計にも挑戦してみます。」

先生

「それが一番の近道です。Django ORMの集計処理に慣れてくると、データベース操作への不安も自然と減っていきますよ。」

カテゴリの一覧へ
新着記事
New1
Django
Djangoフォームでバリデーションエラーを表示する方法を完全解説|初心者向け
New2
Django
Djangoフォームの基本構造を完全解説!初心者でもわかるフィールドとバリデーションの仕組み
New3
Python
PythonのSQLAlchemy使い方入門!初心者でもわかるインストールと初期設定
New4
Django
Djangoフォーム入門|forms.Form と ModelForm の違いを初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Python
PythonでCassandraに接続する方法を完全ガイド!cassandra-driverの使い方
No.2
Java&Spring記事人気No2
Python
PythonでRedisをキャッシュとして活用!アプリを爆速にする方法を徹底解説
No.3
Java&Spring記事人気No3
Flask
PythonのFlaskでテンプレートを多言語化!翻訳の基本構文を完全ガイド
No.4
Java&Spring記事人気No4
Flask
PythonのFlaskで言語を自動判別!ユーザーに合わせた表示切り替えの仕組みを徹底解説
No.5
Java&Spring記事人気No5
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.6
Java&Spring記事人気No6
Python
PythonでCassandraをバックアップ!データの保存と復元を初心者向けに完全ガイド
No.7
Java&Spring記事人気No7
Python
PythonでCassandraのテーブル設計をマスター!初心者のためのデータモデル講座
No.8
Java&Spring記事人気No8
Python
PythonでMySQLに接続する方法!pymysqlの基本的な使い方