Django Sum&计数

时间:2013-04-26 12:42:09

标签: django

我有一些看起来像这样的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',但这也不起作用。有任何想法吗?我需要使用尽可能少的查询。

1 个答案:

答案 0 :(得分:0)

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

无论如何,您可能需要use a raw SQL query.