发布新日志

  • oracle部分分析函数

    2007-10-11 16:48:27

    语法:RANK ( ) OVER ( [query_partition_clause] order_by_clause )。

    一个例子:

    TABLE:S (subject,mark)

    数学,80
    语文,70
    数学,90
    数学,60
    数学,100
    语文,88
    语文,65
    语文,77

    现在想要的结果是:每门科目的前3名的分数

    数学,100
    数学,90
    数学,80
    语文,88
    语文,77
    语文,70
    那么语句就这么写:

    select * from (select rank() over(partition by subject order by mark desc) rk,S.* from S) T
    where T.rk<=3;

     

    三种rank函数

    row_number(),有两个并列第一,只返回一个结果          
    rank()是跳跃排序,有两个第二名时接下来就是第四名
    dense_rank()l是连续排序,有两个第二名时仍然跟着第三名

    partition by的意思

    就是按照某字段分组,  
      比如  
      id   order  
      1     1  
      1     2  
      1     3  
      2     4  
      2     5  
      2     6  
      如果按id   PARTITION,则可以出现  
      1     1  
      1     2  
      1     3  
      2     1  
      2     2  
      2     3  

数据统计

  • 访问量: 8000
  • 日志数: 15
  • 建立时间: 2007-09-14
  • 更新时间: 2008-03-25

RSS订阅

Open Toolbar