score_info表有studentID,score,classID三个字段
 查询出每个班级分数最高的人
是求出每个班级最高得分所对应的studentID~!在线等

解决方案 »

  1.   

    select studentID
    from
    (
    select t.*,row_number() over(partition by classID order by score desc) rn
    from score_info
    )
    where rn=1;
      

  2.   

    select calssID, studentID, score from (
    select classID, studentID, score, dense_rank() over (partition by classID order by score desc) rk from score_info) where rk = 1;
      

  3.   

    1楼和2楼的答案都是正确的,再取最大的分数的时候,使用row_number()和dense_rank()都是可以的
      

  4.   


    oracle中分析函数的使用方法,详细见http://hi.baidu.com/wencong402/blog/item/0a8dbb29634738fd98250a2d.html
      

  5.   


    create table score_info
    (
    studentID varchar(6),
    score number,
    classID varchar(6)
    )insert into score_info values('100001',80,'1');
    insert into score_info values('100002',70,'1');
    insert into score_info values('100003',50,'1');
    insert into score_info values('200001',90,'2');
    insert into score_info values('200002',70,'2');
    insert into score_info values('200003',85,'2');
    insert into score_info values('200004',80,'2');
    insert into score_info values('300001',60,'3');
    insert into score_info values('300002',75,'3');
    commit;select k.*
      from score_info k,
           (select classid, max(score) as max_score
              from score_info
             group by classid) t -- 可以求出各班级的最高分数,然后关联一下,就可以球相关的STUDENTID
     where k.classid = t.classid
       and k.score = t.max_score
                                 --分析函数确实有很好的效果,但是建议楼主先学好基础的SQL语法吧
    嘎嘎~~
      

  6.   

    --写个不用分析函数的。这个你应该能看懂
    select studentid,score,classid from score_info
      where (score,classid) in
      (select max(score) score,classid from score_info group by classid)
      

  7.   

    我觉得你这个题目如果出现并列最高分的话,应该把他们都列出来吧?
    如果是这样的话,就用我的代码或者将2楼的dense_rank()改成rank()
    如果你只要列出其中一个的话,就用1楼和2楼的,不过有点不符合常理
      

  8.   


    SELECT K.*
      FROM SCORE_INFO K,
           (SELECT CLASSID, MAX(SCORE) AS MAX_SCORE
              FROM SCORE_INFO
             GROUP BY CLASSID) T STUDENTID
     WHERE K.CLASSID = T.CLASSID
       AND K.SCORE = T.MAX_SCORE  SELECT A.*
              FROM (SELECT CLASSID,
                     STUDENTID,
                     RANK() OVER(PARTITION BY CLASSID ORDER BY SCORE DESC) S
                FROM SCORE_INFO) A
             WHERE A.S = 1;