如果以这种方法对值计数, GROUP BY 子句是必须的;它告诉MySQL在对值计数之前怎样进行聚集。如果将其省去,则要出错。COUNT(*) 与GROUP BY 一起用来对值进行计数比分别对每个不同的列值进行计数有更多的优点,这些优点是: ■ 不必事先知道要汇总的列中有些什么值。 ■ 不用编写多个查询,只需编写单个查询即可。 ■ 用单一查询就可以得出所有结果,因此可以对结果进行排序。 前两个优点对于更方便地表示查询很重要。第三个优点也较为重要,因为它提供了显示 结果的灵活性。在使用GROUP BY 子句时,其结果是在要分组的列上进行排序的,但是可以 使用ORDER BY 来按不同的次序进行排序。例如,如果想得到各州产生的总统人数,并按产 生人数最多的州优先排出,可以如下使用ORDER BY 子句: 如果希望进行排序的列是从计算得出的,则可以给该列一个别名,并在ORDER BY 子句中引用这个别名。前面的查询说明了这一点; COUNT(*) 列的别名为count。引用这样的列的另一种方法是引用它在输出结果中的位置。前面的查询可编写如下: 我不认为按位置引用列易读。如果增加、删除或重新排序输出列,必须注意检查ORDER BY子句,并且如果列号改变后还得记住它。别名就不存在这种问题。如果想与计算出来的列一道使用GROUP BY,正如ORDER BY 一样,应该利用别名或列位置来引用它。下面的查询确定在一年的每个月中出生的总统人数: