标签归档:over应用

mssql sqlserver 数据分组后取平均值的方法分享


摘要:
下文讲述分组数据取平均值的方法,如下所示:
实验环境:sql server 2008 R2


下文讲述,取一张学生成绩表中,
并为每个学生成绩后面加上”个人平均分”及”全班平均分”。

实现思路:
使用over开窗函数,对数据进行分组,并加上聚合计算函数。

create table [maomao365.com]
(keChengName nvarchar(30),
 chengJi     decimal(18,1),
 name        nvarchar(10)
 )
 go
 insert into [maomao365.com]
 (keChengName,chengJi,name)values
 ('语文',98,'张三'),
 ('数学',92,'张三'),
 ('语文',90,'李四'),
 ('数学',100,'李四'),
 ('语文',83,'王二'),
 ('数学',98,'王二')
 go
 
 --方式:使用开窗函数计算个人平均分及班级平均分
  
 
  select avg(chengJi)
   over(partition by name) as [个人平均分],
   avg(chengJi)
   over() as [班级平均分],
   * from [maomao365.com]   
   go
  
 truncate table [maomao365.com]
 drop table [maomao365.com]
 

mssql sqlserver 使用sql脚本对数据按照1,2,3 1,2,3 一批一批数据进行排序


摘要:
下文讲述使用row_number对数据按照1,2,3类别的排序方法分享,如下所示:
实验环境:sql server 2008 R2


例:
今天领导要求我们对一个数据表进行如下排序:
序号:
1
2
3
1
2
3

实现思路:
下文使用over开窗函数对数据进行群组排序,再结合order by对数据进行二次排序

   create table #maomao365([序号] int)
insert into  #maomao365([序号])
select 1 union all
select 2 union all
select 3 union all
select 1 union all
select 2 union all
select 3
Go
--测试数据结束
SELECT [序号]
FROM
(SELECT *, ROW_NUMBER() OVER (PARTITION BY [序号] ORDER BY [序号]) keyId  FROM #maomao365) t
ORDER BY t.keyId,t.[序号];

go

truncate table   #maomao365 
drop  table #maomao365 
mssql_sqlserver_排序应用_8418

mssql_sqlserver_排序应用_8418

mssql sqlserver 同时对表数据进行排序和分组小计总计的方法分享


摘要:
下文分享同事对表数据,进行排序和分组小计,总计的方法分享,如下所示:

实现思路:
主要使用开窗函数over进行相关操作,如下所示:

	 create table test(keyId int identity,sort varchar(10),qty int)
	go
		insert into test(qty,sort)values
		(1,'a'),(2,'a'),(3,'b'),(8,'c'),(9,'c')

    go

      select *,sum(qty) over(partition by sort) as [分组小计]
       ,sum(qty) over()  as  [总计] from test 
       order by keyId desc 

      go
     truncate table test 
     drop     table test
	 
mssql_sqlserver_分组小计和总计的方法分享

mssql_sqlserver_分组小计和总计的方法分享