• oracle有关函数 rank(),row_number(),dense_rank(),over()使用小结


    我们直接来动手实验吧,原理性的描述可以网上百度。

    step 建表

    create table ttt(name varchar2(10),class number,grade number);

    构造如下数据,插入到表中

        fda    1    80
        ffd    1    78
        dss    1    95
        cfe    2    74
        gds    2    92
        gf    3    99
        ddd    3    99
        adf    3    45
        asdf    3    55
        3dd    3    78

    rank()

    --rank 跳跃性排序 eg:有两个第一,接下来就是第三 ,grade 按同一clas,降序显示
        select name,class,grade,rank()over(partition by class order by grade desc) sort_num from ttt;

     row_number()

        select name,class,grade,row_number() over(partition by class order by grade desc) mm from ttt;

     dense_rank()

    select name,class,grade,dense_rank() over(partition by class order by grade desc) mm from ttt;

     需求:求每个班中,成绩为第一名的学生。(可能存在多个人并列第一)

     dense_rank()与RANK()都可以 ,row_number() 只能取得一位。

    扩展:

         --按分组的列累计,分组后给出总和
              select name,class,grade,sum(grade) over(partition by class order by grade desc) mm ,
              sum(grade) over(partition by class ) mm02
              from ttt;
  • 相关阅读:
    高斯消元算法
    Fermat小定理的证明
    Pollard Rho 算法简介
    做一些无聊的题
    永远不要相信自己的傲慢
    笔记-数据结构进阶
    笔记-区间问题
    线段树板子
    [DarkBZOJ3694] 最短路
    [CF321D] Ciel and Flipboard
  • 原文地址:https://www.cnblogs.com/gudaozi/p/8575839.html
Copyright © 2020-2023  润新知