1
0
mirror of https://github.com/django/django.git synced 2025-10-24 14:16:09 +00:00

[5.0.x] Fixed #34987 -- Fixed queryset crash when mixing aggregate and window annotations.

Regression in f387d024fc.

Just like `OrderByList` the `ExpressionList` expression used to wrap
`Window.partition_by` must implement `get_group_by_cols` to ensure the
necessary grouping when mixing window expressions with aggregate
annotations is performed against the partition members and not the
partition expression itself.

This is necessary because while `partition_by` is implemented as
a source expression of `Window` it's actually a fragment of the WINDOW
expression at the SQL level and thus it should result in a group by its
members and not the sum of them.

Thanks ElRoberto538 for the report.
Backport of e76cc93b01 from main
This commit is contained in:
Simon Charette
2023-11-23 00:09:08 -05:00
committed by Mariusz Felisiak
parent 06bdf62b56
commit 95dec210e8
3 changed files with 25 additions and 13 deletions

View File

@@ -16,3 +16,7 @@ Bugfixes
* Fixed a regression in Django 4.2 that caused a crash of
``QuerySet.aggregate()`` with aggregates referencing other aggregates or
window functions through conditional expressions (:ticket:`34975`).
* Fixed a regression in Django 4.2 that caused a crash when annotating a
``QuerySet`` with a ``Window`` expressions composed of a ``partition_by``
clause mixing field types and aggregation expressions (:ticket:`34987`).