标签归档:where及having

mssql sqlserver having count(*)>1及having sum(*) >***关键字功能及用法讲解说明


摘要:
下文讲述having count(*) >1及having sum(*) >***的功能及用法
实验环境:sql server 2008 R2



having count(*) >1 的功能 说明


having 关键字的功能常常用于和group by 关键字一起使用,对聚合后的数据进行聚合。

having 关键字主要应用于where关键字对聚合函数数据进行过滤。
例:
having 对sum 、avg、count等聚合函数过滤。


having count(*) >1:
聚合后行数大于1的纪录
having sum(*) >***:
聚合后sum的值大于指定纪录的方法



having count(*) >1 举例说明

    create table [maomao365.com]
     (keyId int identity(1,1),
       sort varchar(30),
       qty   int
     )
     go
      ----生成基础数据
      insert into [maomao365.com](sort, qty)values
      ('mssql',8),('mssql',10),('mysql',1),('mysql',8),
      (N'sql爱好者',2),(N'sql爱好者',30)
      go
        
      ----输出分组数据中,数量大于10的聚合行 
     ---使用having 对聚合数据进行过滤
      select sort,sum(qty) from  [maomao365.com] 
       where 1=1 
       group by sort 
       having sum(qty) >10  

      ----输出分组数据中,行数大于1行的数据
       select sort,
                sum(qty) as [合计数],
                count(1) as [行数] 
         from  [maomao365.com] 
       where 1=1 
       group by sort 
       having count(1) >1
     go
     truncate table maomao365.com
     drop       table maomao365.com

mssql sqlserver中sql脚本编写-where having关键字区别及应用


摘要:
下文主要讲述sql脚本编写中,where及having 关键的用法区别,如下所示:
实验环境:sqlserver 2008



where having 关键字功能简介

where : 对检索数据进行过滤操作,where返回给用户的数据时,已经进行了where 过滤,where关键字不能使用聚合函数过滤
having : 对已查询出的数据,进行聚合函数过滤
————————————————————————–
where同having关键字之间的区别:
where 应用于行集数据过滤 –在数据聚合前先过滤
having 应用于聚合数据过滤 —在数据聚合后再进行过滤操作
在使用having关键字的地方,一定存在使用group by关键字的分组操作



where having 关键举例说明

create table A(name varchar(30),qty int)
go
insert into A(name,qty)values('maomao365.com',30)
insert into A(name,qty)values('maomao365.com',80)
insert into A(name,qty)values('maomao365.com',90)
go
----用法1:可以使用where,禁止使用having 
select name,qty  from A where qty >30 
go
select name,qty  from A 
   having qty >10  --HAVING 子句中的列 'A.qty' 无效,
   ----因为该列没有包含在聚合函数或 GROUP BY 子句中
go
---用法2:不可以使用where ,但可以使用having
select name,sum(qty) as qtyall from A  where qtyall>50 group by name 
---会提示qtyall 列不存在
go
select name,sum(qty) as qtyall from A  group by name  having qtyall>50

go
drop table A