WITH tt AS(
SELECT 100 ID,'语文' course,80 score FROM dual UNION ALL
SELECT 100,'数学',85 FROM dual UNION ALL
SELECT 100,'英语',90 FROM dual UNION ALL
SELECT 101,'语文',60 FROM dual UNION ALL
SELECT 101,'数学',70 FROM dual UNION ALL
SELECT 101,'英语',100 FROM dual UNION ALL
SELECT 102,'语文',100 FROM dual UNION ALL
SELECT 102,'数学',90 FROM dual UNION ALL
SELECT 102,'英语',90 FROM dual )
SELECT ID,COURSE, SCORE
  FROM (SELECT ID,
               COURSE,
               SCORE,
               RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM
          FROM TT)
 WHERE MM <= 2

解决方案 »

  1.   

    WITH tt AS(
    SELECT 100 ID,'语文' course,80 score FROM dual UNION ALL
    SELECT 100,'数学',85 FROM dual UNION ALL
    SELECT 100,'英语',90 FROM dual UNION ALL
    SELECT 101,'语文',60 FROM dual UNION ALL
    SELECT 101,'数学',70 FROM dual UNION ALL
    SELECT 101,'英语',100 FROM dual UNION ALL
    SELECT 102,'语文',100 FROM dual UNION ALL
    SELECT 102,'数学',90 FROM dual UNION ALL
    SELECT 102,'英语',90 FROM dual )
    SELECT ID,COURSE, SCORE
      FROM (SELECT ID,
                   COURSE,
                   SCORE,
                   RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM
              FROM TT)
     WHERE MM <= 2
    是不是比较复杂点,繁琐点,有没有简单的?
      

  2.   


    能详细点吗?
    SELECT ID,COURSE, SCORE   FROM (SELECT ID,                COURSE,                SCORE,                RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM           FROM TT)  WHERE MM <= 2
    复杂?
      

  3.   


    能详细点吗?
    SELECT ID,COURSE, SCORE   FROM (SELECT ID,                COURSE,                SCORE,                RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM           FROM TT)  WHERE MM <= 2
    复杂?那个  RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM 它查出的值是什么啊?有点点小白
      

  4.   


    能详细点吗?
    SELECT ID,COURSE, SCORE   FROM (SELECT ID,                COURSE,                SCORE,                RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM           FROM TT)  WHERE MM <= 2
    复杂?那个  RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM 它查出的值是什么啊?有点点小白
    你可以单独查查看看,
    SELECT ID,
           COURSE,
           SCORE,
           RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM
      FROM TT
    就是分组排序并分配序号,按每个分组分配序号。。尤其是当有重复值是,分配的序号相同。。
    具体over用法你可以百度一下。。
      

  5.   


    能详细点吗?
    SELECT ID,COURSE, SCORE   FROM (SELECT ID,                COURSE,                SCORE,                RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM           FROM TT)  WHERE MM <= 2
    复杂?那个  RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM 它查出的值是什么啊?有点点小白
    你可以单独查查看看,
    SELECT ID,
           COURSE,
           SCORE,
           RANK() OVER(PARTITION BY ID ORDER BY SCORE DESC) MM
      FROM TT
    就是分组排序并分配序号,按每个分组分配序号。。尤其是当有重复值是,分配的序号相同。。
    具体over用法你可以百度一下。。非常感谢,