有两张表: 
Record(recNumber <主键>学号, recScore分数) 
Student(stuNumber <主键>学号, stuName姓名, stuClass班级) 
用SQL语句实现以下查询: 
查询每一个班级中第二名的同学的姓名。
大神们帮帮我吧

解决方案 »

  1.   

    select *  
    from Record a inner join Student b 
    on a.recNumber=b.stuNumber存为VIEW1
    select *  
    from VIEW1 A
    where 2=(select count(*) from VIEW1 where a.stuClass=stuClass and a.recScore>=recScore)
      

  2.   

    create table temp 
    select A.学号,A.stuName,A.stuClass,A.recScore
    from record A,stutdent B
    where A.学号=B.学号并列第一名 则无第二名
    select *
    from temp A
    where 1=(select count(*)  from A.stuClass=stuClass and A.recScore<recScore);
      

  3.   


    没有办法用一句SQL搞定么大神
      

  4.   

    可以
    select *  
     from (select *  
     from Record a inner join Student b 
     on a.recNumber=b.stuNumber) A
     where 2=(select count(*) from (select *  
     from Record a inner join Student b 
     on a.recNumber=b.stuNumber) where a.stuClass=stuClass and a.recScore>=recScore)
      

  5.   

    报错-Error 1248  Every drived table must have its own alias~怎么破?完全的新手上路,大神多包涵
      

  6.   

    select *  
      from (select *  
      from Record a inner join Student b 
      on a.recNumber=b.stuNumber) A
      where 2=(select count(*) from (select *  
      from Record a inner join Student b 
      on a.recNumber=b.stuNumber) c where a.stuClass=c.stuClass and a.recScore>=c.recScore)
      

  7.   

    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分....
      

  8.   

    感觉应该先从两个表取出数据联合成一个新表,group by class 然后按照分数排序下 order by record,再取出第二个数据就可以。菜鸟刚刚看了点数据库的。说的比较乱,不是给答案,只是说下自己的想法,大神们请见谅啊!