mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +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:
@@ -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'}])
|
||||
|
||||
Reference in New Issue
Block a user