mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #29542 -- Fixed invalid SQL if a Subquery from the HAVING clause is used in the GROUP BY clause.
Thanks Tim Graham for the review.
This commit is contained in:
parent
312eb5cb11
commit
dd3b470719
2 changed files with 20 additions and 2 deletions
|
@ -4,7 +4,7 @@ from decimal import Decimal
|
|||
from django.core.exceptions import FieldDoesNotExist, FieldError
|
||||
from django.db.models import (
|
||||
BooleanField, CharField, Count, DateTimeField, ExpressionWrapper, F, Func,
|
||||
IntegerField, NullBooleanField, Q, Sum, Value,
|
||||
IntegerField, NullBooleanField, OuterRef, Q, Subquery, Sum, Value,
|
||||
)
|
||||
from django.db.models.expressions import RawSQL
|
||||
from django.db.models.functions import Length, Lower
|
||||
|
@ -585,3 +585,16 @@ class NonAggregateAnnotationTestCase(TestCase):
|
|||
qs,
|
||||
[{'jacob_name': 'Jacob Kaplan-Moss', 'james_name': 'James Bennett'}],
|
||||
)
|
||||
|
||||
@skipUnlessDBFeature('supports_subqueries_in_group_by')
|
||||
def test_annotation_filter_with_subquery(self):
|
||||
long_books_qs = Book.objects.filter(
|
||||
publisher=OuterRef('pk'),
|
||||
pages__gt=400,
|
||||
).values('publisher').annotate(count=Count('pk')).values('count')
|
||||
publisher_books_qs = Publisher.objects.annotate(
|
||||
total_books=Count('book'),
|
||||
).filter(
|
||||
total_books=Subquery(long_books_qs, output_field=IntegerField()),
|
||||
).values('name')
|
||||
self.assertCountEqual(publisher_books_qs, [{'name': 'Sams'}, {'name': 'Morgan Kaufmann'}])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue