From e888a9b30dd9d62a930b9244d1b5531bb17544b4 Mon Sep 17 00:00:00 2001
From: Florian Hahn <flo@fhahn.com>
Date: Tue, 19 Feb 2013 22:58:09 +0100
Subject: [PATCH] Fixed #15624 -- Made sure aggregations are present in SELECT

---
 django/db/models/query.py          | 1 -
 django/db/models/sql/query.py      | 3 +++
 tests/aggregation_regress/tests.py | 7 +++++++
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/django/db/models/query.py b/django/db/models/query.py
index 406838f907..63861bb71b 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -319,7 +319,6 @@ class QuerySet(object):
             query.add_aggregate(aggregate_expr, self.model, alias,
                                 is_summary=True)
             aggregate_names.append(alias)
-        query.append_aggregate_mask(aggregate_names)
 
         return query.get_aggregation(using=self.db)
 
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 9d4bb69d48..fa7ae51d9c 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -321,6 +321,7 @@ class Query(object):
         # information but retrieves only the first row. Aggregate
         # over the subquery instead.
         if self.group_by is not None:
+
             from django.db.models.sql.subqueries import AggregateQuery
             query = AggregateQuery(self.model)
 
@@ -996,6 +997,8 @@ class Query(object):
             field_name = field_list[0]
             source = opts.get_field(field_name)
             col = field_name
+        # We want to have the alias in SELECT clause even if mask is set.
+        self.append_aggregate_mask([alias])
 
         # Add the aggregate to the query
         aggregate.add_to_query(self, alias, col=col, source=source, is_summary=is_summary)
diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py
index 0838cb8fe8..8388e78dbe 100644
--- a/tests/aggregation_regress/tests.py
+++ b/tests/aggregation_regress/tests.py
@@ -250,6 +250,13 @@ class AggregationTests(TestCase):
             'price__max': Decimal("82.80")
         })
 
+        # Regression for #15624 - Missing SELECT columns when using values, annotate
+        # and aggregate in a single query
+        self.assertEqual(
+            Book.objects.annotate(c=Count('authors')).values('c').aggregate(Max('c')),
+            {'c__max': 3}
+            )
+
     def test_field_error(self):
         # Bad field requests in aggregates are caught and reported
         self.assertRaises(