如果 ORM 查询包含子查询(很容易通过 Django 1.11 中的RawSQL
表达式或新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 中的设置)。有什么建议么?