0

如果 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 中的设置)。有什么建议么?

4

0 回答 0