例:一张表学籍表,包括学号、年级、班级,想实现以下功能,先找出学号最小的,然后是和他同年级同班级的,再在剩余的里面找学号最小的,然后是和他同年级同班级的,以此类推,能否就用简单的查询语句就可以实现?
id        grade        class
002         2            4
005         3            1
001         2            5
004         3            1
003         2            5
排序后
id        grade        class
001         2            5
003         2            5
002         2            4
004         3            1
005         3            1

解决方案 »

  1.   

    SQL> select t.*,MIN(ID) over(PARTITION BY grade,CLASS) min_id
      2  from a t ORDER BY min_id,ID
      3  /ID              GRADE      CLASS MIN_ID
    ---------- ---------- ---------- ----------
    001                 2          5 001
    003                 2          5 001
    002                 2          4 002
    004                 3          1 004
    005                 3          1 004
      

  2.   

    MIN(ID) over(PARTITION BY grade,CLASS)就是取同年级同班级最小的学号,对照上面MIN_ID列就可以看出规律了,按这个最小学号和原始学号排列就是你要的结果了到网上搜索下 oracle 分析函数 ,会有很多关于分析函数的资料