标签归档:聚合

mssql sqlserver 对不同群组对象进行聚合计算的方法分享


摘要:
下文讲述通过一条sql语句,采用over关键字同时对不同类型进行分组的方法,如下所示:
实验环境:sql server 2008 R2


当有一张明细表,我们需同时按照不同的规则,计算平均、计数、求和等聚合计算时,此时我们可以使用
over子句对数据进行操作。
例:

我们需获取一个学生成绩的 总平均分 各科平均分 学生单科成绩同平均分的差异,此时我们可以多次使用over子句,得出我们想要的结果,

    
    select 
     [课程名],
     [姓名],
     [成绩],
     AVG([成绩]) over () as [总平均分],
     AVG([成绩]) over (partition by  [课程名]) as [单科平均分],
     [成绩] - AVG([成绩]) over (partition by  [课程名]) as [平均分差异]  
     from [学生成绩表]

mssql sqlserver group by 和 having关键字应用简介


摘要:
下文讲述sql server中group by 和having 关键字的功能,并举例应用
实验环境: sqlserver 2008 R2



group by和having 功能简介

group by 关键字的功能:
根据指定列对数据进行群组,并将群组内的指定列进行聚合操作,返回给用户一个聚合后的分组表(也可以单独返回一个分组表)
having 关键字的功能:
对聚合列进行筛选,类似于where关键字的功能


在采用group by关键字的结果集中,返回信息必须为: group by 后的分组列,或聚集函数生成的新列
having和where 的区别:
having 是聚合过滤方法
where 是过滤行的方法


group by和having 举例说明

   create table [maomao365.com]
(sort nvarchar(30),qty  int,
 subSort varchar(30)    )
go
insert into [maomao365.com]
          (sort, qty,subSort)   values
          ('A类',10,'香水类'),('B类',30,'皮革类'),
          ('A类',88,'香水类'),('C类',56,'其它类'),
          ('D类',9,'其它类'),('A类',10,'饰品类')
go
---1.获取 sort 类别的数量总额
select sort ,sum(qty) as [qty汇总] from 
   [maomao365.com]
  group by sort 


---2.获取 sort,subSort类别的数量总额
select sort,subSort ,sum(qty) as [qty汇总] from 
   [maomao365.com]
  group by sort,subsort 
---3.获取 sort 类别的数量总额大于50的类别
select sort ,sum(qty) as [qty汇总] from 
   [maomao365.com]
  group by sort 
   having sum(qty) >50 

go
truncate table   [maomao365.com]
drop     table   [maomao365.com]