Index: includes/database/select.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/database/select.inc,v
retrieving revision 1.56
diff -u -p -r1.56 select.inc
--- includes/database/select.inc	22 Dec 2010 08:13:58 -0000	1.56
+++ includes/database/select.inc	24 Dec 2010 19:53:42 -0000
@@ -1362,7 +1362,7 @@ class SelectQuery extends Query implemen
     // Create our new query object that we will mutate into a count query.
     $count = clone($this);
 
-    $group_by = array_keys($count->getGroupBy());
+    $group_by = drupal_map_assoc($count->getGroupBy());
 
     if (!$count->distinct) {
       // When not executing a distinct query, we can zero-out existing fields
Index: modules/simpletest/tests/database_test.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/database_test.test,v
retrieving revision 1.107
diff -u -p -r1.107 database_test.test
--- modules/simpletest/tests/database_test.test	22 Dec 2010 08:13:58 -0000	1.107
+++ modules/simpletest/tests/database_test.test	24 Dec 2010 19:53:42 -0000
@@ -2026,12 +2026,19 @@ class DatabaseSelectComplexTestCase exte
    */
   function testCountQueryGroupBy() {
     $query = db_select('test_task');
-    $pid_field = $query->addField('test_task', 'pid');
-    $query->groupBy('pid');
+    // Using a column alias is necessary to testing the code.
+    // Without the alias, the query succeeds for the wrong reason.
+    $pid_field = $query->addField('test_task', 'pid', 'task_pid');
+    $query->addExpression('COUNT(test_task.task)', 'count');
+    $query->groupBy('task_pid');
+    $query->orderBy('task_pid', 'asc');
 
     $count = $query->countQuery()->execute()->fetchField();
 
     $this->assertEqual($count, 3, t('Counted the correct number of records.'));
+
+    $pid = $query->execute()->fetchObject();
+    $this->assertEqual($pid->count, 3, t('Correct data retrieved.'));
   }
 
   /**
