日期:2014-05-18  浏览次数:20871 次

班级前60%的学生平均分SQL怎么写?
如题。
有个表
学生,班级,分数

想要求某班前60%的学生平均分

select top 60 percent avg(分数) from 表 where class='905' order by 分数 desc

提示
列名 '分数' 在 ORDER BY 子句中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
请教怎么给分数线排下序再取 60%

------解决方案--------------------
SQL code

if object_id('[表]') is not null drop table [表]
create table [表] (学生 int identity(1,1),班级 varchar(6),分数 int)
go
insert into [表] select '1班',ceiling(60+rand()*40)
go 3
insert into [表] select '2班',ceiling(60+rand()*40)
go 3
insert into [表] select '3班', ceiling(60+rand()*40)
go 3
insert into [表] select '4班', ceiling(60+rand()*40)
go 3
insert into [表] select '5班', ceiling(60+rand()*40)
go 3
insert into [表] select '6班', ceiling(60+rand()*40)
go 3
insert into [表] select '7班', ceiling(60+rand()*40)
go 3
insert into [表] select '8班', ceiling(60+rand()*40)
go 3
insert into [表] select '9班', ceiling(60+rand()*40)
go 3
insert into [表] select '10班', ceiling(60+rand()*40)
go 3
/*
学生          班级     分数
----------- ------ -----------
1           1班     69
2           1班     80
3           1班     71
4           2班     98
5           2班     94
6           2班     79
7           3班     83
8           3班     66
9           3班     86
10          4班     98
11          4班     89
12          4班     74
13          5班     73
14          5班     79
15          5班     89
16          6班     89
17          6班     73
18          6班     97
19          7班     81
20          7班     90
21          7班     82
22          8班     62
23          8班     88
24          8班     75
25          9班     68
26          9班     65
27          9班     89
28          10班    85
29          10班    97
30          10班    75

(30 row(s) affected)
*/
--查看前百分之60的平均分
select top 60 percent 班级,avg(分数) 平均分 from [表] group by 班级 order by avg(分数) desc
/*
班级     平均分
------ -----------
1班     92
7班     87
3班     86
8班     85
2班     84
6班     77
*/