Opened 9 years ago
Last modified 5 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.