学习,我只知道over好像是累加的意思

解决方案 »

  1.   

    ---
    RANK 
    功能描述:根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置。组内的数据按ORDER BY子句排序,然后给每一行赋一个号,从而形成一个序列,该序列从1开始,往后累加。每次ORDER BY表达式的值发生变化时,该序列也随之增加。有同样值的行得到同样的数字序号(认为null时相等的)。然而,如果两行的确得到同样的排序,则序数将随后跳跃。若两行序数为1,则没有序数2,序列将给组中的下一行分配值3,DENSE_RANK则没有任何跳跃。
    SAMPLE:下例中计算每个员工按部门分区再按薪水排序,依次出现的序列号(注意与DENSE_RANK函数的区别)SELECT d.department_id , e.last_name, e.salary, RANK() 
            OVER (PARTITION BY e.department_id ORDER BY e.salary) as drank
      FROM employees e, departments d
    WHERE e.department_id = d.department_id
       AND d.department_id IN ('60', '90');DEPARTMENT_ID LAST_NAME                     SALARY      DRANK
    ------------- ------------------------- ---------- ----------
               60 Lorentz                         4200          1
               60 Austin                          4800          2
               60 Pataballa                       4800          2
               60 Ernst                           6000          4
               60 Hunold                          9000          5
               90 Kochhar                        17000          1
               90 De Haan                        17000          1
               90 King                           24000          3
      

  2.   

    樓主的SQL語句是分析函數中的一種參考以下文章
    Oracle 9i 分析函数参考手册http://www.cnoug.org/viewthread.php?tid=38387