--
Ticket URL: <https://code.djangoproject.com/ticket/32463>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* 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>
Comment (by blackhorsesacher):
Thank you for the very rapid response. Yes, I confirm that 'amount' is a
DecimalField
--
Ticket URL: <https://code.djangoproject.com/ticket/32463#comment:2>
Comment (by blackhorsesacher):
Replying to [comment:2 blackhorsesacher]:
> Thank you for the very rapid response. Yes, I confirm that 'amount' is
a DecimalField
I've now tested with Django 3.2 beta 1 and confirm that it's now working
well. Thanks again.
--
Ticket URL: <https://code.djangoproject.com/ticket/32463#comment:3>