我有一些看起来像这样的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'
,但这也不起作用。有任何想法吗?我需要使用尽可能少的查询。
答案 0 :(得分:0)
聚合仅适用于Django ORM中的单个字段。我查看了各种聚合函数的代码,并注意到单字段限制是硬连线的。基本上,当您使用Sum(field)
时,它只会记录以后再将其传递给特定于数据库的后端,以便转换为SQL并执行。显然,聚合和注释在SQL中没有标准化。
无论如何,您可能需要use a raw SQL query.