专业编程基础技术教程

网站首页 > 基础教程 正文

Excel零基础学SQL15:数据分组统计group by的筛选条件having

ccvgpt 2024-08-07 18:37:14 基础教程 16 ℃

1、提取销售总额大于等于500的数据

1.1、按部门进行分组求和

Excel零基础学SQL15:数据分组统计group by的筛选条件having

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)="刘")

Tags:

最近发表
标签列表