对数据分组的深入理解

1,为什么要分组?

 答:分组后方便统计,需要返回多行信息就必须要分组

如:

 判断各种性别的人数的结果:

 sex       人数

 男        ?

 女        ?

返回的结果不止一行,所以一定要进行分组!

2,如何进行分组(分组的原理),举例说明

答:将查询对象按一定条件分组,然后对每一组进行聚合分析.

如:

如果要统计所有学生人数
select count(*) from stu
如果要统计所有男生人数
select count(*) from stu where sex='男'

上面的统计都只需要一次,因为将返回的所有数据当作了一个组

有时需要对返回的数据集同时进行多次统计(如同时求男生人数和女生人数),这就需要根据某个条件将数据分开(根据性别将学生分成2个组)),这个分开的动作就叫  分组。

3,下面SQL错误的原因是什么?

select sex,sid,count(sid)
  from stu
  group by sex

答:sid字段错误! 当进行sex分组后,sid可能有多个值,这时如果直接查询sid,不能确定返回那个sid;而count(sid)就能返回一个确定的值,因为count(sid)是一个统计函数!

注:

a,分组以后,每个组所返回的值必须确定!

b,分组以后,个体的信息全部丢失!即分组以后,是无法查询个人的信息的!

4,如何进行多字段分组,举例说明?

答:在group by 之后跟上你要根据什么分组的多个字段,用逗号隔开!

如:

select count(sid)

from t_class

group by class,sex;

分析:假如只有两个班,先根据班级分成2组,在根据性别分组,这样便有四行记录,这样便可以分别统计各班的男女人数!

5,where和having有什么区别!

答:where里不能有聚合函数,因为where在group by之前执行,此时没有进行分组统计,所以不能用统计函数;用于对表的原始记录进行过滤,选择符合条件的记录!

having中可以有聚合函数,是因为having在group by 之后执行,所以可以用统计函数!即只有分组后,统计函数才能写在:select和having里;用于对表的统计结果再次执行过滤筛选!

6,如何理解sql的执行顺序?

答:

1. FROM 指定要操作的表
2. WHERE 对表过滤
3. GROUP BY 对表分组,执行SELECT 操作与统计操作
4. HAVING 对统计结果再次过滤
5       最后对结果进行排序

posted on 2010-11-29 13:50  aXinNo1  阅读(420)  评论(0编辑  收藏  举报