3

我有一些如下所示的 MySQL 代码:

SELECT 
visitor AS team,
COUNT(*) AS rg,
SUM(vscore>hscore) AS rw,
SUM(vscore<hscore) AS rl 
FROM `gamelog` WHERE status='Final' 
      AND date(start_et) BETWEEN %s AND %s GROUP BY visitor

我正在尝试将其转换为该查询的 Django 版本,而不进行多次查询。这可能吗?我阅读了如何做Sum()Count(),但是当我想像我正在做的那样比较两个字段时,它似乎不起作用。

这是迄今为止我能想到的最好的,但它没有用......

vrecord = GameLog.objects.filter(start_et__range=[start,end],visitor=i['id']
                                 ).aggregate(
                                             Sum('vscore'>'hscore'),
                                             Count('vscore'>'hscore'))

我也尝试'vscore>hscore'在那里使用,但这也不起作用。有任何想法吗?我需要使用尽可能少的查询。

4

1 回答 1

1

聚合仅适用于 Django ORM 中的单个字段。我查看了各种聚合函数的代码,并注意到单字段限制是硬连线的。基本上,当您使用 时Sum(field),它只是将其记录下来以备后用,然后将其传递给特定于数据库的后端,以转换为 SQL 并执行。显然,聚合和注释在 SQL 中没有标准化。

无论如何,您可能需要使用原始 SQL 查询。

于 2013-04-26T12:56:20.513 回答