mssql sqlserver 分组结果集过滤方法 简介


摘要:
下文讲述如何对聚合数据进行过滤,
方法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_分组数据过滤方法分享

mssql_sqlserver_分组数据过滤方法分享-where having用法简介