当前位置:   article > 正文

SQL语句:rank() over()用法记录,mysql和oracle

rank() over

一.rank over(order by 列名)  ---说明:该函数只适用于oracle

1、 按age升序给运动员排名,,如果不想并列可用ROW_NUMBER()函数

select pid,name,age,rank() over(order by age) as rank_num from players;
å¨è¿éæå¥å¾çæè¿°

可以看到有好几个age相同的运动员,他们并列排在第2。

2、查询排名为第10的学生的姓名,年龄

select name,age
from (select pid,name,age,rank() over(order by age) as rank_num from players) 
where rank_num= 10;

å¨è¿éæå¥å¾çæè¿°

整个结果集为一个分组,下面我们可以指定通过partition by 给结果集进行分组,
rank在每个分组内进行排名。

二:rank over(partition by 列名,order by 列名)

partition by用于给结果集分组。
rank在每个分组内进行排名。

1、按年龄分组,组内按分数降序排名
select name,age,score,rank() over(partition by age order by score desc) as rank_num from players;
å¨è¿éæå¥å¾çæè¿°

三:针对mysql数据库,由于没有rank over函数,只能用变量来实现

        SELECT * ,
        IF(@p=qs_id ,
        CASE
        WHEN @s=mobile_num THEN @r:=@r+1
        WHEN @s:=mobile_num THEN @r:=@r+1
        END,
        @r:=1 ) AS rank,
        @p:=qs_id,
        @s:=mobile_num
        FROM statistic_flow,(SELECT @p:=NULL,@s:=NULL,@r:=0)r
         where mobile_num = '15174304320'
        ORDER BY mobile_num,qs_id,create_time DESC

根据手机号和qsid来分组,再在组内排名,实现效果如下

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/240809
推荐阅读
相关标签
  

闽ICP备14008679号