Djangoでは、データベースのクエリをPythonコードで書くことができます。その中でも、GROUP BYを使う方法について説明します。
モデルの定義
まず、以下のようなモデルを定義します。
class Target(BaseModel):
# 金額
amount = models.IntegerField()
# 社員ID
user = models.ForeignKey(User, on_delete=models.PROTECT)
# 部署ID
section = models.ForeignKey(Section, on_delete=models.PROTECT)
このモデルでは、Target
という名前のテーブルがあり、その中にはamount
(金額)、user
(社員ID)、section
(部署ID)というフィールドがあります。
GROUP BYの使用
部署ごとの目標合計金額を取得するには、以下のように書きます。
total_amount_by_section = (
Target.objects
.values("section_id")
.annotate(section_total=Sum("amount"))
.values("section_id", "section_total")
)
このコードでは、まずTarget.objects.values("section_id")
でsection_id
によるグループ化を行います。次に、.annotate(section_total=Sum("amount"))
で各グループのamount
の合計を計算します。最後に、.values("section_id", "section_total")
で結果を取得します。
この結果、部署IDとその部署の目標合計金額のリストが得られます。
以上がPython DjangoでGROUP BYを使う方法です。この方法を使えば、Pythonコードだけで複雑なデータベースの操作を行うことができます。.