Opened 9 years ago
Last modified 4 years ago
#26602 closed New feature
RawSQL window functions break count() — at Initial Version
Reported by: | Jamie Cockburn | Owned by: | nobody |
---|---|---|---|
Component: | Database layer (models, ORM) | Version: | dev |
Severity: | Normal | Keywords: | QuerySet.extra |
Cc: | josh.smeaton@… | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I wanted to annotate my objects with a running total:
class A(models.Model): amount = models.IntegerField() created = models.DateTimeField(auto_now_add=True) qs = A.objects.annotate(total=RawSQL("SUM(amount) OVER (ORDER BY created)", []))
That works fine, and I get a running total for each object, but I cannot call count()
on that queryset:
>>> qs.count() Traceback... ProgrammingError: window functions not allowed in GROUP BY clause
Using extra()
, I can get the same annotation behaviour as well being able to call count()
:
>>> qs = A.objects.extra(select={'total': 'SUM(amount) OVER (ORDER BY created)'}) >>> qs.count() 8
Note:
See TracTickets
for help on using tickets.