mysql实现Oracle的rank()over()排序函数之前要查询排序且有排名,如果是oracle的话有rank() over()函数,但是mysql没有这样的函数,只能⾃⼰试着⽤变量实现
表结构:
SELECT id,
score ,
@rank := @rank + 1 AS rank
FROM a, (SELECT @rank := 0) tmp
ORDER BY score desc ;
不过这样有⼀个问题如果同时有两个99分rank也会顺序的排序
我想到的临时解决办法就是内层进⾏⼀次group by,仅算出分数的排名,再⽤分数与a表匹配
sql代码:
rank函数的用法SELECT a.id,a.score,b.rank from a,(
SELECT a.score ,
@rank := @rank + 1 AS rank
FROM (SELECT score from a GROUP BY score) a, (SELECT @rank := 0) tmp ORDER BY score desc
) b
where a.score = b.score
ORDER BY b.rank;
不知道有没有更好的解决办法,如果不正确希望指点
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论