摘要:
下文讲述如何对聚合数据进行过滤,
方法1:having 过滤分组集合
方法2:where 过滤分组集合
如聚合后数据大于某一个值的数据
通常过滤数据前我们可以使用where限定条件,当我们对数据进行聚合后,此时我们过滤数据,如果采用where 过滤就会提示以下错误信息:
聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。
此时我们需要使用having 关键字来替代where关键字对聚合分组数据进行过滤。
注意事项:
having 关键字是在数据分组后进行过滤操作。
例:
/*创建基础数据*/
create table test(
name varchar(30), sort varchar(30),
qty int,priceAll int
)
go
/*生成原始数据*/
insert into test (name,sort,qty,priceAll)values('洗衣粉','a',100,1200)
insert into test (name,sort,qty,priceAll)values('洗发水','a',90,800)
insert into test (name,sort,qty,priceAll)values('肥皂','b',60,100)
insert into test (name,sort,qty,priceAll)values('牙刷','c',30,50)
insert into test (name,sort,qty,priceAll)values('洗发水','a',60,160)
insert into test (name,sort,qty,priceAll)values('肥皂','b',70,120)
insert into test (name,sort,qty,priceAll)values('牙刷','c',10,20)
go
/*获取一个产品进货总数量超过100*/
----方法1: having 过滤
select name,sum(qty) as qtyAll from test
group by name
having sum(qty)>100
----方法2:where 关键字变相聚合过滤
select * from
(
select name,sum(qty) as qtyAll from test
group by name
) as test
where test.qtyAll >100
go
truncate table test
drop table test
mssql_sqlserver_分组数据过滤方法分享-where having用法简介