计算表中相同纪录前二名的数据

来源:百度知道 编辑:UC知道 时间:2024/06/04 18:18:08
name class yeartime enlish chinese
a 一(1)班 2008 50 60
b 一(1)班 2008 40 30
c 一(2)班 2007 30 40
d 一(2)班 2007 40 50
e 一(1)班 2007 30 60

得出结果(得出的平均分是假设,末计算)
class yeartime top2avg
一(1)班 2008 40
一(2)班 2007 60
查出表中同一年度,同一班级的前二名,并计算出该班在同一年度前二名平均分.在同一表中显示.

--1.取每年每班级的最高分,2.再取每年每班的次高分(不包括最高分子查询中的所有记录的最高分)
--3.由以上两步求出的子查询按年、班级汇总求平求前二名的最高分
--表结构是这样的
CREATE TABLE [tablename] (
[name] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[class] [nvarchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[yeartime] [float] NULL ,
[English] [float] NULL ,
[Chinese] [float] NULL
) ON [PRIMARY]
GO
--这是测试通过的
select class,yeartime,top2avg=avg(topavg)/2 from (select * from
(
select class,yeartime,topavg=max(english+chinese) from tablename group by class,yeartime union --第一名各年、班

select class,yeartime,topavg=max(topavg) --第二名各年、班
from (
select class,yeartime,topavg=english+chinese from tablename as a2
where not exists (select * from
(select class,yeartime,top1=max(english+chinese) from tablename group by class,yeartime) a1 --第一名子查询
where a1.class=a2.class and a1.yeartime=a2.ye