This Domain(Admin5.com) is for Sale:

My SQL数据库实用技术(04)

时间:2007-12-23  来源:不详  作者:迈克DB


虽然这个方法可行,但是它很繁锁而且并不真正适合于可能有许多不同的值的列。考虑一下怎样以这种方式确定每个州出生的总统人数。您不得不找出有哪些州,从而不能省略(SELECT DISTINCT state FROM president),然后对每个州执行一个SELECT COUNT(*) 查询。很显然,有些事是可以简化的。所幸MySQL 可以利用单个查询对一个列中不同的值进行计数。因此,针对学生表可以按如下得出男孩和女孩的人数:


假如以这种方法对值计数, GROUP BY 子句是必须的;它告诉MySQL 在对值计数之前怎样进行聚集。假如将其省去,则要出错。COUNT(*) 与GROUP BY 一起用来对值进行计数比分别对每个不同的列值进行计数有更多的优点,这些优点是:
■ 不必事先知道要汇总的列中有些什么值。
■ 不用编写多个查询,只需编写单个查询即可。
■ 用单一查询就可以得出所有结果,因此可以对结果进行排序。
前两个优点对于更方便地表示查询很重要。第三个优点也较为重要,因为它提供了显示 copyright dedecms
结果的灵活性。在使用GROUP BY 子句时,其结果是在要分组的列上进行排序的,但是可以
使用ORDER BY 来按不同的次序进行排序。例如,假如想得到各州产生的总统人数,并按产
生人数最多的州优先排出,可以如下使用ORDER BY 子句:


假如希望进行排序的列是从计算得出的,则可以给该列一个别名,并在ORDER BY 子句中引用这个别名。前面的查询说明了这一点; COUNT(*) 列的别名为c o u n t。引用这样的列的另一种方法是引用它在输出结果中的位置。前面的查询可编写如下:

我不认为按位置引用列易读。假如增加、删除或重新排序输出列,必须注重检查O R D E RBY 子句,并且假如列号改变后还得记住它。别名就不存在这种问题。假如想与计算出来的列一道使用GROUP BY,正如ORDER BY 一样,应该利用别名或列位置来引用它。下面的查询确定在一年的每个月中出生的总统人数:

本文来自织梦
假如不想用LIMIT 子句来限制查询输出,而是利用查找特定的COUNT( ) 值来达到这个目的,可使用H AVING 子句。下面的查询给出了产生两个以上总统的州:

从更为普遍的意义上说,这是一种在要查找的列中重复值时执行的查询类型。H AVING 类似于W H E R E,但它是在查询结果已经选出后才应用的,用来缩减服务器实际送到客户机的结果。除了COUNT( ) 外还有许多汇总函数。MIN( )、MAX( )、SUM( ) 和AVG( ) 函数在确定列的最大、最小、总数和平均值时都非常有用,甚至可以同时使用它们。下面的查询得出给定的测试和测验的各种数字特性。它还给出有多少学分参与了每个值的计算(有的学生可能缺旷或未计入)。

看完这篇,您有何感觉呢?

文章评论

共有位Admini5网友发表了评论 查看完整内容

24小时热门信息