ORM クエリにサブクエリが含まれている場合 (RawSQL
式または Django 1.11 の新しいSubquery
式で簡単に実行できます)、Django ORM の count メソッドはそれを group by 句に追加します。
簡単な例を次に示します。
qs = Activity.objects.filter(...).annotate(feed_date=RawSQL('SELECT MAX(feed_date) FROM core_track WHERE ...'))
qs.count()
これにより、以下のようなものが生成されます。
SELECT COUNT_BIG(*) FROM
(SELECT [core_activity].[id] AS Col1,
(SELECT MAX(feed_date) FROM core_track WHERE activity_id=id) AS [feed_date]
FROM [core_activity] WHERE (...)
GROUP BY [core_activity].[id], (SELECT MAX(feed_date) FROM core_track WHERE activity_id=id))
通常、Postgres を使用し、この sql を喜んで受け入れて実行します。ただし、新しい顧客は、group by ステートメントでのサブクエリを好まない SQL Server を使用する必要があります。
Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause
私は何かを見落としているのか、何か間違っているのか、それとも適切な回避策があるのか (このクエリが通過できるようにするSql Serverの設定など)があるのだろうかと思います。助言がありますか?