各位乡亲父老,欢迎大家来捧场!江湖卖艺,生活不易!技艺交流(投稿、打广告、链接交换),请搓这里

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

2022/2/15 10:54:27管理员 1523
- N +
我们直接来动手实验吧,原理性的描述可以网上百度。

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;



0人赞 分享 二维码 赏一个
选择分享方式
移步手机端
文章手机二维码

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
选择打赏方式
微信赞助

打赏