ホームページ > バックエンド開発 > Python チュートリアル > Django のクエリセットを使用してデータをグループ化するには?

Django のクエリセットを使用してデータをグループ化するには?

DDD
リリース: 2024-12-02 21:48:10
オリジナル
671 人が閲覧しました

How to Group Data Using Django's Querysets?

Django クエリでデータをグループ化する

Django では、データベースからデータを取得するときにクエリセットを使用することがよくあります。これらのクエリセットは、データのフィルタリング、並べ替え、および操作のためのさまざまな方法を提供します。一般的な操作の 1 つは、SQL の GROUP BY 句に似た、特定のフィールドによるデータのグループ化です。

グループ化のための集計

Django でデータをグループ化するには、ORM の集計機能を利用できます。たとえば、すべてのメンバーを取得する次のクエリについて考えてみましょう:

Members.objects.all()
ログイン後にコピー

このクエリはタプルのリストを返します。各タプルはメンバーの詳細を表します:

[('Eric', 'Salesman', 'X-Shop'),
 ('Freddie', 'Manager', 'X2-Shop'),
 ('Teddy', 'Salesman', 'X2-Shop'),
 ('Sean', 'Manager', 'X2-Shop')]
ログイン後にコピー

これらの結果をグループ化するには指定フィールドでは、values() メソッドと annotate() メソッドを使用できます。

from django.db.models import Count

result = (
    Members.objects
    .values('designation')
    .annotate(dcount=Count('designation'))
    .order_by()
)
ログイン後にコピー

このクエリは次のような SQL ステートメント:

SELECT designation, COUNT(designation) AS dcount
FROM members
GROUP BY designation
ログイン後にコピー

結果はディクショナリのリストで、それぞれが指定とその指定のメンバー数を表します:

[{'designation': 'Salesman', 'dcount': 2}, {'designation': 'Manager', 'dcount': 2}]
ログイン後にコピー

複数のフィールドを含めるには結果は、次のように、values() メソッドに引数として追加するだけです。ここ:

.values('designation', 'first_name', 'last_name')
ログイン後にコピー

リファレンス

Django での集約とグループ化の詳細については、次のリソースを参照してください:

  • Django ドキュメント: [Values]( https://docs.djangoproject.com/en/stable/ref/models/querysets/#values)、 [注釈](https://docs.djangoproject.com/en/stable/ref/models/querysets/#annotate)、[カウント](https://docs.djangoproject.com/en/stable/ref/models/ querysets/#django.db.models.Count)
  • Django ドキュメント: [集約](https://docs.djangoproject.com/en/stable/topics/db/aggregation/)、特に [デフォルトの順序付けまたは order_by() との相互作用](https://docs.djangoproject.com) に関するセクション/en/stable/topics/db/aggregation/#interaction-with-default-ordering-or-orderby)

以上がDjango のクエリセットを使用してデータをグループ化するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート