【发布时间】:2019-05-13 16:48:51
【问题描述】:
假设我有具有created_at 属性的对象。我想拥有
一个查询,将导致在给定日期创建的对象的计数
(count_)、截至该日期 (sub) 的对象的小计,以及完整的
所有对象的总数(total_):
date | count_ | sub | total_
------------+--------+-------+-------
2018-10-08 | 1 | 1 | 15
2018-10-11 | 2 | 3 | 15
2018-10-15 | 3 | 6 | 15
2018-10-23 | 4 | 10 | 15
2018-10-24 | 5 | 15 | 15
我设法得到了count_ 和total_:
Obj.objects.annotate(
date=Trunc('created_at', 'day', output_field=DateField())
).values(
'date'
).annotate(
count_=Window(expression=Count('id'), partition_by=[F('date')]),
total_=Window(expression=Count('id'))
).distinct()
生成这个SQL:
SELECT DISTINCT DATE_TRUNC('day', "obj_obj"."created_at") AS "date",
COUNT("obj_obj"."id") OVER (PARTITION BY DATE_TRUNC('day', "obj_obj"."created_at")) AS "count_",
COUNT("obj_obj"."id") OVER () AS "total_"
FROM "obj_obj"
【问题讨论】:
标签: sql django postgresql django-models django-orm