美文网首页
SQL中窗口函数rank(),dense_rank()排序

SQL中窗口函数rank(),dense_rank()排序

作者: 木易楊_a | 来源:发表于2020-08-19 17:31 被阅读0次

    数据统计中经常遇到排序问题,按次数,销售额等排序的需求

    拿例子来说

    我们要按照价格从高到低的顺序,对下面这张表里的商品进行排序。让价格相同的商品位次也一样,而紧接着它们的商品则有两种排序方法,一种是跳过之后的位次,另一种是不跳过之后的位次

    源表:products

    1)sql如下,rank()实现跳位,dense_rank()不跳位

    sql执行结果如下

    注意:rank(),dense_rank()函数属于SQL中的新功能,只有个别数据库支持此函数,具体视数据库情况而定

    考虑到函数的特殊性,下面采用非等值自连接实现排序

    2)如下sql执行结果与rank()函数一样

    3)如下sql执行结果与dense_rank()函数一样

    加上distinct去重,存在相同次位的记录时,不跳过次位而是连续输出

    默认排序从1开始,价格去重,{100,80,50,40,30}

    100,没有比100大的,所以count()返回1

    80,比80大的只有一个100,所以count()返回2

    以此类推

    你们也可以试下把>改成<,执行结果是否与心理预期一样

    4)使用自连接也可以实现

    如若改成内连接inner join 

    没有比100大的,被连接条件p1.price<p2.price排除掉了,所以执行结果没有100,没有第一名

    相关文章

      网友评论

          本文标题:SQL中窗口函数rank(),dense_rank()排序

          本文链接:https://www.haomeiwen.com/subject/cixdjktx.html