22,209
社区成员
发帖
与我相关
我的任务
分享
--创建表
create table school(sschool varchar(10),sname varchar(20),score int)
--插入数据
insert into school select 'A','s1',50
union all
select 'A','s2',40
union all
select 'B','s3',60
union all
select 'C','s4',70
union all
select 'C','s5',60
--查询
select sschool,avg(score)-(select avg(score) from school) from school group by sschool
select a.学校名称,a.学校平均分-b.全部平均分
(select 学校名称,avg(分数) 学校平均分 from tb group by 学校名称) a,
(select avg(分数) 全部平均分 from tb)b
USE test
GO
-->生成表tb
if object_id('tb') is not null
drop table tb
Go
Create table tb([学校名称] nvarchar(1),[学生姓名] nvarchar(2),[分数] smallint)
Insert into tb
Select N'A',N'张三',50
Union all Select N'A',N'李四',40
Union all Select N'B',N'王五',60
Union all Select N'C',N'赵六',70
Union all Select N'C',N'黄八',60
SELECT
[学校名称]
,AVG([分数])-avg_score AS [结果]
FROM (
SELECT
[学校名称]
,[分数]
,AVG([分数])OVER() AS avg_score
From tb
) AS T
GROUP BY
[学校名称]
,avg_score
/*
学校名称 结果
---- -----------
A -11
B 4
C 9
*/
select
学校名称,avg(分数)-(select avg(分数) from tb)
from tb group by 学校名称
如果是tb表的话,我觉得这样比较直观。
declare @t table
([学校名称] varchar(1),[学生姓名] varchar(2),[分数] int)
insert @t
select 'a','t1',50 union all
select 'a','t2',40 union all
select 'b','t3',60 union all
select 'c','t4',70 union all
select 'c','t5',60
select
[学校名称],avg([分数])-(select avg([分数]) from @t)
from @t t group by [学校名称]
/*
学校名称
---- -----------
a -11
b 4
c 9
*/