求一条简单的sql语句

dqk1985 2013-01-25 11:38:14
有表 学校学生成绩表

学校名称 学生姓名 分数
A .. 50
A .. 40
B .. 60
C .. 70
C .. 60

学生姓名不要管。我是想计算,用一条sql语句。取出用各学校的平均分减去所有分数的平均分。在线等。谢谢了。应该最终是三条记录。三个学校的各个平均分。减去总的平均分。
...全文
210 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd722522 2013-01-29
  • 打赏
  • 举报
回复
我是来看叶子的
-Tracy-McGrady- 2013-01-26
  • 打赏
  • 举报
回复
太坏了你们这些人
sqlkxr 2013-01-26
  • 打赏
  • 举报
回复

--创建表
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
szm341 2013-01-25
  • 打赏
  • 举报
回复

select a.学校名称,a.学校平均分-b.全部平均分
(select 学校名称,avg(分数) 学校平均分 from tb group by 学校名称) a,
(select avg(分数) 全部平均分 from tb)b
快溜 2013-01-25
  • 打赏
  • 举报
回复
select avg(分数)-[avg] from (select *,[avg]=avg(分数) over() from 成绩表) t group by 学校名称,[avg]
我腫了 2013-01-25
  • 打赏
  • 举报
回复
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
*/
我腫了 2013-01-25
  • 打赏
  • 举报
回复
引用 6 楼 bbbbbben 的回复:
引用 5 楼 maco_wang 的回复:SQL code?123select 学校名称,avg(分数)-(select avg(分数) from tb)from tb group by 学校名称 如果是tb表的话,我觉得这样比较直观。 性能上會有所影響吧?每次select都會調用一個子查詢,可以先建個變量保存子查詢結果,然後再調用子查詢。 ……
性能上會有所影響吧?每次select都會調用一次子查詢,可以先建個變量保存子查詢結果,然後再調用變量。 打錯了
我腫了 2013-01-25
  • 打赏
  • 举报
回复
引用 5 楼 maco_wang 的回复:
SQL code?123select 学校名称,avg(分数)-(select avg(分数) from tb)from tb group by 学校名称 如果是tb表的话,我觉得这样比较直观。
性能上會有所影響吧?每次select都會調用一個子查詢,可以先建個變量保存子查詢結果,然後再調用子查詢。
叶子 2013-01-25
  • 打赏
  • 举报
回复

select 
    学校名称,avg(分数)-(select avg(分数) from tb)
from tb group by 学校名称
如果是tb表的话,我觉得这样比较直观。
叶子 2013-01-25
  • 打赏
  • 举报
回复

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
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧