Django QuerySet注释/聚合中SQL的直方图

时间:2014-12-17 17:42:19

标签: python django django-queryset django-orm

在“纯”SQL中,可以执行以下查询:

SELECT 
count(CASE WHEN Age>= 10 AND Age < 20 THEN 1 END) AS '10 - 20',
count(CASE WHEN Age>= 21 AND Age < 30 THEN 1 END) AS '21 - 30',
count(CASE WHEN Age>= 31 AND Age < 35 THEN 1 END) AS '31 - 35',
count(CASE WHEN Age>= 36 AND Age < 40 THEN 1 END) AS '36 - 40',
FROM (SELECT Age FROM Attendees) AS AgeGroups

它基本上允许您计算数据集的直方图。

有没有办法指定使用Django aggregate()语法?基本上应用任意语法来过滤聚合?

1 个答案:

答案 0 :(得分:2)

Django不允许您使用aggregate方法对queryset对象执行此操作,因为这比Django尝试的目标更复杂。这可能会在不久的将来使用the improved query APIs更改,允许custom aggregate methods

在此之前,您可以使用Django的raw method on querysets执行此操作,它允许您执行任意SQL。请记住,这不受Django的保护,因此您需要注意SQL中的任何可能的问题。