有一成绩表,结构如下:
考号 char(9)
姓名 char(6)
班级 char(2)
语文 int
数学 int
英语 int
总分 int
考试名称 char(20)
表中有五个班级3次考试成绩,如何查询某班某次考试总分前100名有多少人?
如何查询某班3次考试总分前100名各有多少人?

解决方案 »

  1.   

    总分前100名中各班各有多少人?
    考试名称 char(20)来区分这三次考试?
      

  2.   


    insert tb(考号,姓名,班级,总分,考试名称)
    select '1','aaa','c1',100,'bbb' union all
    select '2','bbb','c1',50,'bbb' union all
    select '3','cccc','b',100,'bbb' union all
    select '4','bbb','c1',50,'ccc' union all
    select '5','aaa','c1',100,'ccc' union all
    select '5','cccc','b',50,'ccc' 
    --某班某次考试总分前100名有多少人
    select count(*) from (select 考号,姓名,班级,总分,考试名称,sorId=(select count(distinct 总分) from tb where a.考试名称=考试名称 and a.总分<=总分)
    from tb a ) c 
    where 考试名称='bbb' and 班级='c1' and sorId<=200
    --查询某班3次考试总分前100名各有多少人(刚才每班只考试三次。如果多于三次,请加班级OR)
    select count(*) from (select 考号,姓名,班级,总分,考试名称,sorId=(select count(distinct 总分) from tb where a.考试名称=考试名称 and a.总分<=总分)
    from tb a ) c 
    where  班级='c1' and sorId<=200