私は、評価したいトリッキーな集計クエリに遭遇したDjangoアプリに取り組んでいます。
私のプロジェクトのdemoアプリでは、図書館の所蔵を表す次のモデル クラスを宣言しました。
from django.db import models
class Book(models.Model):
interesting = models.BooleanField()
class Library(models.Model):
books = models.ManyToManyField(Book)
私が照会したいのは、単一の図書館内の「興味深い」本の最大数です。これは、各図書館の「興味深い」本の数の最大値です。
SQL では、これは次のとおりです。
select max(a.num_interesting_books) as max
from (select count(demo_book.id) as num_interesting_books
from demo_book
inner join demo_library_books on (demo_book.id = demo_library_books.book_id)
where demo_book.interesting=TRUE
group by demo_library_books.library_id) as a
次のテスト データを使用します。
insert into demo_library(id) values (1), (2), (3);
insert into demo_book(id, interesting) values
(1, FALSE), (2, FALSE), (3, TRUE),
(4, TRUE), (5, TRUE),
(6, TRUE), (7, TRUE), (8, TRUE), (9, FALSE);
insert into demo_library_books(library_id, book_id) values
(1, 1), (1, 2), (1, 3),
(2, 4), (2, 5),
(3, 6), (3, 7), (3, 8), (3, 9), (3, 3);
上記のSELECTステートメントの結果は次のとおりです。
max
-----
4
(1 row)
予想通り。
Django のクエリ API を使用してこの値を計算することは可能ですか?