#32463: 'Sum' aggregate function not working with Window function on SQLite.
-------------------------------------+-------------------------------------
Reporter: blackhorsesacher | Owner: nobody
Type: Bug | Status: closed
Component: Database layer | Version: 3.1
(models, ORM) |
Severity: Normal | Resolution: duplicate
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Mariusz Felisiak):
* status: new => closed
* resolution: => duplicate
* component: Uncategorized => Database layer (models, ORM)
Old description:
> 'Sum' aggregate function not working with Window function for sqlite3
> version 3.27.2
> Produces these errors:
> >>>sqlite3.OperationalError: near "OVER": syntax error
> >>>django.db.utils.OperationalError: near "OVER": syntax error
> This is similar to the fixed issue #30027 "SQLite (pre 3.25.0) does not
> support window functions, raises OperationalError", but I am using SQLite
> 3.27.2 and the native SQL query is working from sqlite3 command line and
> also when using Model.objects.raw(), which I'm having to use as a
> workaround.
> It should be reproducible as follows, assuming model "myapp.mymodel" has
> a field "amount":
> >>>from django.db.models import Sum, Window
> >>>from myapp.models import mymodel
> >>>mymodel.objects.all().annotate(cumsum=Window(expression=Sum('amount')))
> The raw query works OK:
> >>>rawqs=mymodel.objects.raw("SELECT *, SUM (amount) OVER (ORDER BY id)
> AS cumsum FROM myapp_mymodel")
New description:
'Sum' aggregate function not working with Window function for sqlite3
version 3.27.2
Produces these errors:
{{{
>>>sqlite3.OperationalError: near "OVER": syntax error
>>>django.db.utils.OperationalError: near "OVER": syntax error
}}}
This is similar to the fixed issue #30027 "SQLite (pre 3.25.0) does not
support window functions, raises OperationalError", but I am using SQLite
3.27.2 and the native SQL query is working from sqlite3 command line and
also when using Model.objects.raw(), which I'm having to use as a
workaround.
It should be reproducible as follows, assuming model "myapp.mymodel" has a
field "amount":
{{{
>>> from django.db.models import Sum, Window
>>> from myapp.models import mymodel
>>>
mymodel.objects.all().annotate(cumsum=Window(expression=Sum('amount')))
}}}
The raw query works OK:
{{{
>>> rawqs=mymodel.objects.raw("SELECT *, SUM (amount) OVER (ORDER BY id)
AS cumsum FROM myapp_mymodel")
}}}
--
Comment:
Thanks for this report, It looks like a duplicate of #31723 (fixed in
71d10ca8c90ccc1fd0ccd6683716dd3c3116ae6a, Django 3.2+) . Can you confirm
that `amount` is a `DecimalField`?
--
Ticket URL: <https://code.djangoproject.com/ticket/32463#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/074.07bc8827f0b3a796fa6f244586454c71%40djangoproject.com.