次のようなクエリの作成に関する情報はどこにありますか。
select
SomeField1,
(select count(distinct SomeField2) from SomeTable where SomeCondition) as SomeField3
from
SomeTable2
where
SomeCondition2
Django ORM を使用していますか? おそらくDjangoのドキュメントのどこかにあるのですが、見つかりません。
DjangoのORMは、モデルごとのクエリとそのリレーショナルデータ(つまり、ForeignKey、ManyToManyRelationshipなど)を実行することを目的としています。あなたの例は、2つの無関係なモデルから同時に2つの結果が必要であることを示しています。AFAIK、それを別々に行う以外にそれを行う方法はありません
count = SomeTable.objects.filter(SomeCondition).distinct(SomeField2).count()
somefield1 = SomeTable2.objects.filter(SomeCondition2)
ただし、本当に必要な場合に達成できる方法はいくつかありますが、お勧めしません。
2 つのテーブルの関係は?
カウントが必要だと思います。チェックなしのコード スニペットがあります。
SomeModel2.objects.annotate(new_field=Count('SomeField2',
distinct=True)).filter(condition=condition,
another_condition=condition2).values('new_field', 'Somefield1')
詳細については、 https://docs.djangoproject.com/en/dev/ref/models/querysets/#annotateおよびHow to sort by annotated Count() in a related model in Djangoを参照してください。
あなたの質問は具体的にはこの情報を見つけることができる場所なので、Aggregation |を見てください。Django docs - ここで試していることの一部 (具体的にはカウント) を達成するのに役立つはずです。
ただし、関連のないテーブルを一緒にクエリすることは、まったく一般的なことではありません。データベースはとにかくそのクエリを分割するため、個別のクエリを作成し、返されたデータを手動で関連付ける方がよいでしょう。
あなたの場合、そのクエリを実行する必要がある場合は、データベースで生の SQL クエリを作成することをお勧めします。