【发布时间】:2016-08-13 20:00:52
【问题描述】:
我有一个有效的 SQL 查询,我正在尝试用 Django 编写(不使用 RAW),希望您能提供帮助。
总的来说,我正在寻找接下来的两个查询 - 第一个计算 COUNT,然后我正在寻找计算 COUNTS 的 AVERAGE。 (这将为您提供每个位置票上的平均物品数量)
有效的 SQL 是:
SELECT location_name, Avg(subq.num_tickets) FROM (
SELECT Count(ticketitem.id) AS num_tickets, location.name AS location_name
FROM ticketitem
JOIN ticket ON ticket.id = ticketitem.ticket_id
JOIN location ON location.id = ticket.location_id
JOIN location ON location.id = location.app_location_id
GROUP BY ticket_id, location.name) AS subq
GROUP BY subq.location_name;
对于我的 Django 代码,我正在尝试这样的事情:
# Get the first count
qs = TicketItem.objects.filter(<my complicated filter>).\
values('ticket__location__app_location__name','posticket').\
annotate(num_tickets=Count('id'))
# now get the average of the count
qs2 = qs.values('ticket__location__app_location__name').\
annotate(Avg('num_tickets')).\
order_by('location__app_location__name')
但这失败了,因为 num_tickets 不存在......无论如何 - 怀疑我很慢。希望有人能启发我!
【问题讨论】: