avg、sum、min等函数常常与group by子句配合使用,对数据进行分组统计。 数据源: 按部门对销售进行求和,平均值,计数,最大值、最小值等分组统计。 sql语句: select 部门,sum(销售) as 总销售,avg(销售) as 平均销售,count(销售) as 销售笔数,min(销售) as 部门最小销售,max(销售) as 部门最大销售 from [Sheet1$] group by 部门 结果: 现在将要求拆分开来,要求提取每个部门的最大销售,并按降序排列。 sql语句: select 部门,max(销售) as 部门最大销售 from [Sheet1$] group by 部门 order by max(销售) desc 结果: 如果使用下面的sql语句: select 部门,max(销售) as 部门最大销售 from [Sheet1$] group by 部门 order by 部门最大销售 desc 将返回: 也就是不能够用使用字段别名来进行排序。 在sql中,如果不想写 order by max(销售) desc中的max(销售) ,可以用数字来表示select 后面的字段,如此题,将语句改为: select 部门,max(销售) as 部门最大销售 from [Sheet1$] group by 部门 order by 2 desc 结果: 此处,2表示select后面第2个字段,第一个字段自然是 部门。 将sql语句改为: select 部门,max(销售) as 部门最大销售 from [Sheet1$] group by 部门 order by 1,2 desc 结果:部门升序,部门最大销售降序排序。 Having子句: Having子句用于与Group by子句配合使用,它总是在Group by子句后面,告诉Group by子句输出里包含那些分组。相当于where对select的作用。其语法顺序如下: select from where group by having order by 数据源: 要求:提取总销售大于等于1000的部门数据。 1、先执行下面语句: select 部门,sum(销售) as 总销售 from [Sheet1$] group by 部门 结果: 2、按照思路,在上面结果按条件筛选总销售大于等于1000的数据即可。 于是就使用到了having: select 部门,sum(销售) as 总销售 from [Sheet1$] group by 部门 having sum(销售) >=1000 结果:having sum(销售) >=1000就是条件 having子句是group by子句的条件(where)。 |
|