SQL语句:rank()over()用法记录,mysql和oracle
SQL语句:rank()over()⽤法记录,mysql和oracle ⼀.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。
rank函数的用法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 = '151********'
ORDER BY mobile_num,qs_id,create_time DESC
根据⼿机号和qsid来分组,再在组内排名,实现效果如下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。