7.数据分组

1.数据分组入门

     数据分组用来将数据分为多个逻辑组,从而可以对每个组进行聚合运算。

SELECT FAge FROM T_Employee 
GROUP BY FAge 

     GROUP BY子句必须放到WHERE语句的之后:

SELECT FAge FROM T_Employee 
WHERE FSubCompany = 'Beijing' 
GROUP BY FAge 

     需要分组的所有列都必须位于GROUP BY子句的列名列表中,也就是没有出现在GROUP BY子句中的列(聚合函数除外)是不能放到SELECT语句后的列名列表中的。比如下面的SQL语句是错误的:

SELECT FAge,FSalary FROM T_Employee 
GROUP BY FAge 

     因为采用分组以后的查询结果集是以分组形式提供的,由于每组中人员的员工工资都不一样,所以就不存在能够统一代表本组工资水平的FSalary字段了,所以上面的
SQL语句是错误的。不过每组中员工的平均工资却是能够代表本组统一工资水平的,所以可以对FSalary使用聚合函数,下面的SQL语句是正确的:

SELECT FAge,AVG(FSalary) FROM T_Employee 
GROUP BY FAge 

     GROUP BY子句中可以指定多个列,只需要将多个列的列名用逗号隔开即可。指定多个分组规则以后,数据库系统将按照定义的分组顺序来对数据进行逐层分组,首先按照第一个分组列进行分组,然后在每个小组内按照第二个分组列进行再次分组……逐层分组,从而实现“组中组”的效果,而查询的结果集是以最末一级分组来进行输出的。

SELECT FSubCompany,FDepartment FROM T_Employee 
GROUP BY FSubCompany,FDepartment 

2.数据分组与聚合函数

     聚合函数是针对分组后的逻辑数据进行处理,主要有:SUM、AVG、MIN、MAX、COUNT。

     下面的SQL可以统计每个部门中员工年龄的最大值和最小值:

SELECT FDepartment,MIN(FAge) AS FAgeMIN,MAX(FAge) AS FAgeMAX FROM T_Employee 
GROUP BY FDepartment 

     结果:

3.HAVING 语句

    在数据库系统中执行下面的SQL的时候,数据库系统会提示语法错误,这是因为聚合函数不能在WHERE语句中使用:

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee
GROUP BY FAge 
WHERE COUNT(*)>1 

     必须使用HAVING子句来代替:

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee 
GROUP BY FAge 
HAVING COUNT(*)>1 

     HAVING语句能够使用的语法和WHERE几乎是一样的:

SELECT FAge,COUNT(*) AS CountOfThisAge FROM T_Employee 
WHERE FName IS NOT NULL 
GROUP BY FAge 
HAVING COUNT(*)>1
posted on 2012-10-15 14:52  凡一二三  阅读(742)  评论(0编辑  收藏  举报