1、提取销售总额大于等于500的数据
1.1、按部门进行分组求和
select 部门,sum(销售额) as 销售总额 from [sheet3$] group by 部门
1.2、在上表的基础上提取销售总额大于等于500的数据
select * from
(select 部门,sum(销售额) as 销售总额 from [sheet3$] group by 部门)
where 销售总额>=500
(select 部门,sum(销售额) as 销售总额 from [sheet3$] group by 部门) 实则是一个子查询,它作为一个过渡的中间表格(作为数据源之一),提供了销售总额的数据,以进一步筛选出结果。
子查询是一条完整的select语句,即可以作为数据源也可以作为条件。
将上面的思路用下面的SQL语句代替:
select 部门,sum(销售额) as 销售总额 from [sheet3$]
group by 部门
having sum(销售额)>=500
hvaing子句往往跟在group by后面,对其进行条件筛选。
在这里则对分组后销售总额进行条件筛选。
它和where的区别:
where是对数据源(子查询)的初始筛选
having是对分组后得出的销售总额的筛选
where、group by、having三者的顺序是:
where
group by
having
顺序不能乱。
2、提取计数2以上的数据
select 重复 from [sheet3$] group by 重复 having count(*)>1
尽管在【select 重复】后面没有跟上聚合函数count进行计数(【select 重复,count(*)这个语句】),但实际上计数的运算在having后面的count(*),它完成了计数,然后(>1)又完成了筛选。
如果改用where来完成,参考下面语句:
select * from (select 重复,count(*) as 计数 from [sheet3$] group by 重复) where 计数>1
where后面不能有count(*)聚合函数计算。
3、统计姓刘的人数
where方法:
select count(*) from [sheet3$] where 姓名 like "刘%"
在这里,where对姓名进行了筛选,然后再用count计数
having方法:
select 姓名 from [sheet3$] group by 姓名 having left(姓名,1)="刘"
这里用having+left函数对数据分组,然后筛选姓名,条件为:left(姓名,1)="刘"。
然后作为子查询(数据源)接着计数:
select count(*) from
(select 姓名 from [sheet3$] group by 姓名 having left(姓名,1)="刘")