diff --git a/includes/database/select.inc b/includes/database/select.inc
index 9046afbdf7bb17774c841f4e37fc118ff0e04820..7f44063a2a02880cb2093618802de273e7486538 100644
--- a/includes/database/select.inc
+++ b/includes/database/select.inc
@@ -1354,7 +1354,7 @@ public function union(SelectQueryInterface $query, $type = '') {
   }
 
   public function groupBy($field) {
-    $this->group[] = $field;
+    $this->group[$field] = $field;
     return $this;
   }
 
@@ -1362,7 +1362,7 @@ public function countQuery() {
     // Create our new query object that we will mutate into a count query.
     $count = clone($this);
 
-    $group_by = drupal_map_assoc(array_values($count->getGroupBy()));
+    $group_by = $count->getGroupBy();
 
     if (!$count->distinct) {
       // When not executing a distinct query, we can zero-out existing fields
diff --git a/modules/simpletest/tests/database_test.test b/modules/simpletest/tests/database_test.test
index 32742e0c1cd6b6692b13317ecc7ff79cd4159b03..bfd67de9d5af37806f8f9cd086cc72e9d6a623b4 100644
--- a/modules/simpletest/tests/database_test.test
+++ b/modules/simpletest/tests/database_test.test
@@ -2033,10 +2033,13 @@ class DatabaseSelectComplexTestCase extends DatabaseTestCase {
 
     $this->assertEqual($count, 3, t('Counted the correct number of records.'));
 
-    // Test wth an alias.
+    // Use a column alias as, without one, the query can succeed for the wrong
+    // reason.
     $query = db_select('test_task');
     $pid_field = $query->addField('test_task', 'pid', 'pid_alias');
+    $query->addExpression('COUNT(test_task.task)', 'count');
     $query->groupBy('pid_alias');
+    $query->orderBy('pid_alias', 'asc');
 
     $count = $query->countQuery()->execute()->fetchField();