zoukankan      html  css  js  c++  java
  • rownum, row_number(), rank() , dense_rank(), partition by ,max() keep 语句的区别与用法

    rownum,rownumber(), rank(),dense_rank()都是用来为记录分配序号的,

    rownum只能在orderby语句排完序后,在外层嵌套查询才能获得正确的行号,用起来相当复杂

    select rownum, designator from airport_heliport_ts; --这样写是无效的

    正因为这样,产生了row_number() over(order by ) 用法:

    select row_number() over(order by designator),  designator from airport_heliport_ts ;

    它的好处是用一级sql查询就能实现上面的 加行号功能。

    rank(),dense_rank()的功能与之非常相似,区别是:

    row_number()对重复的排序值分配不同的行号;

    rank()对重复排序值分配相同的序号,且行号不连续;如前三个值重复,序号就是1,1,1,4

    dense_rank()对重复排序值分配相同的序号,但行号连续;如前三个值重复,序号就是1,1,1,2

    如果只需返回上述排序后的最大值或最小值,可用:(其中的first可换成last实现升、降序)

    select max(designator) keep(dense_rank first order by designator)   from airport_heliport_ts t;

    分组排序partition

    前面的几种排序方法都只能整体排序,如果要按条件分组后再排序,就要用partition函数,如:

    select row_number() over(partition by bureau_id order by bureau_id,designator), bureau_id,  designator from airport_heliport_ts t ;

    实现按bureau_id分区后,在每个相同的bureau_id分区内排列序号,类似于group by函数,但查询结果不会分组

    除了row_number()外,parttion还支持wm_concat等集合函数,能比wm_concat(distinct) +group by实现更灵活的排序方式

    select wm_concat(designator) over(partition by t.bureau_id order by bureau_id,designator ), bureau_id,  designator from airport_heliport_ts t ;

    select rownum, designator from airport_heliport_ts;
    select row_number() over(order by designator),  designator from airport_heliport_ts ;
    select rank()over(order by designator),  designator from airport_heliport_ts ;
    select dense_rank()over(order by designator),  designator from airport_heliport_ts ;
    select max(designator) keep(dense_rank first order by designator)   from airport_heliport_ts t;
    select row_number() over(partition by t.bureau_id order by bureau_id,designator), bureau_id,  designator from airport_heliport_ts t ;
    select wm_concat(designator) over(partition by t.bureau_id order by bureau_id,designator ), bureau_id,  designator from airport_heliport_ts t ;

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/mol1995/p/9173961.html
Copyright © 2011-2022 走看看