对数据分组的深入理解
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 最后对结果进行排序